Welche Lösungen gibt es für eine JVM-basierte Warteschlange, die größer als Heap ist?

8

Ich betrachte mögliche Technologieoptionen für Warteschlangen (oder vielleicht sind Streams eine bessere Beschreibung) in einem JVM-basierten System.

Einige Voraussetzungen:

  • Muss von der JVM / Java aus erreichbar sein.
  • Warteschlangen müssen Größen unterstützen, die größer sind als der JVM-Heap, möglicherweise größer als der gesamte verfügbare RAM. Daher wird Unterstützung für die Verwendung der Festplatte (oder des Netzwerks) für die Speicherung impliziert.
  • Warteschlangen müssen nach der Prozesslebensdauer nicht dauerhaft sein.
  • Die meisten Verwendungszwecke der Warteschlange haben einen einzelnen Producer und einen einzelnen Consumer. Die Parallelität für eine bestimmte Warteschlange ist daher kein Problem. (Offensichtlich ist Nebenläufigkeit in allen Warteschlangen wichtig.)
  • Warteschlangen sind ad-hoc und temporär. Sie entstehen, sind gefüllt, ausgelaugt und gehen weg.
  • Kleine Warteschlangen sollten vorzugsweise im Speicher bleiben und dann auf der Grundlage der Ressourcenverfügbarkeit zu einem langsameren Speicher wechseln. Diese Anforderung könnte über die Warteschlangentechnologie hinaus erfüllt werden.

Ich untersuche verschiedene Optionen, bin aber gespannt welche Optionen mir fehlen?

    
Alex Miller 18.07.2011, 06:16
quelle

5 Antworten

1

Verwenden Sie eine der verfügbaren JMS-Implementierungen. Zum Beispiel ActiveMQ oder Qpid aus Jakarta.

    
AlexR 18.07.2011 06:25
quelle
1

Ich habe diese FIFO-Queue mit spill to disk durchlaufen, was ziemlich interessant ist und einige Eigenschaften hat, nach denen ich suche:

Ссылка

    
Alex Miller 18.07.2011 17:02
quelle
1

Ich habe in Erwägung gezogen, Terracottas BigMemory als Werkzeug zu verwenden, um Warteschlangendaten in direkten Speicher und Off-Heap zu verschieben.

    
Alex Miller 18.07.2011 17:22
quelle
0

Wie wäre es mit Redis als Messaging-Queue? Es unterstützt sowohl In-Memory als auch persistente Daten, wenn Daten nicht in den RAM passen.

    
Shekhar 18.07.2011 06:55
quelle
0

HSQLDB bietet eine prozessinterne Datenbank-Engine, in der Sie RAM, die lokale Festplatte oder einen Netzwerkserver zum Speichern der Datenbank verwenden können. Das könnte Ihr Boot zum Schweben bringen, besonders wenn Sie später nahtlos zu einer Netzwerklösung und nicht zur lokalen Festplatte wechseln möchten. Der Übergang von kleinen zu großen Warteschlangen würde dann das Verschieben von Daten von einer Datenbank zu einer anderen umfassen. Es gibt Standardmethoden, dies zu tun, aber sie können ziemlich langsam sein.

Da ich mehr darüber nachdenke, denke ich, dass das kein gutes Spiel ist. Für was es wert ist, ist die In-Memory-DB sehr schnell in meiner Erfahrung.

    
Burleigh Bear 18.07.2011 07:08
quelle

Tags und Links