Frage

ich Ideen brauchen eine (wirklich) Hochleistungs-In-Memory-Datenbank / Speichermechanismus zu implementieren. Im Bereich von 20.000 Objekte zu speichern, wobei jedes Objekt alle 5 oder so Sekunden aktualisiert. Ich möchte eine FOSS-Lösung .

Was ist meine beste Option? Was sind Ihre Erfahrungen?

Ich arbeite in erster Linie in Java, aber ich brauche den Datenspeicher eine gute Leistung zu haben, so dass die Datenspeicher-Lösung nicht Java-centric sein muss.

Ich brauche auch diese Objekte abfragen zu können, wie und ich brauche alle Objekte beim Programmstart wiederherstellen können.

War es hilfreich?

Lösung

SQLite ist ein Open-Source in sich geschlossene Datenbank, die im Speicher unterstützt Datenbanken (nur :memory: verbinden) . Es verfügt über Anbindungen für viele gängige Programmiersprachen. Es ist eine traditionelle SQL-basierte relationale Datenbank, aber Sie keinen separaten Server laufen - es ist nur als Bibliothek in Ihrem Programm verwenden. Es ist ziemlich schnell. Ob es schnell genug ist, weiß ich nicht, aber es kann ein Experiment wert sein.

Java-Treiber .

Andere Tipps

aktualisieren Sie 20K-Objekte alle 5 Sekunden oder einer der 20K Aktualisierung alle 5 Sekunden?

Welche Art von Objekten? Warum ist ein traditionelles RDBMS nicht ausreichend?

Schauen Sie sich HSQLDB und Prevayler . Prevayler ist ein Paradigmenwechsel von den traditionellen RDBMS -. Eine, die ich verwendet habe (das Paradigma, das heißt, nicht speziell Prevayler) in einer Reihe von Projekten und fand es wirklich Verdienst zu haben,

Abhängig genau, wie Sie es abfragen müssen, aber haben Sie sah in Memcached?

http://www.danga.com/memcached/

Andere Optionen könnten MySQL MEMORY Tabellen , der APC Cache wenn Sie mit PHP.

Einige weitere Einzelheiten über das Projekt / die Anforderungen wäre hilfreich.

Ein In-Memory-Speicher?

1) ein einfaches C 'malloc' Array, in dem alle Ihre Strukturen indiziert werden würde.

2) BerkeleyDB: http://www.oracle.com /technology/products/berkeley-db/index.html . Es ist schnell, weil Sie Ihre eigene Indizes (sekundäre Datenbank) zu bauen und es gibt keinen SQL-Ausdruck ausgewertet werden.

Schauen Sie sich einige der Produkte, die hier aufgeführt: http://en.wikipedia.org/ wiki / In-memory_database

Welches Maß an Haltbarkeit benötigen Sie? 20.000 aktualisiert alle 5 Sekunden wird wahrscheinlich für die meisten IO-Hardware in Bezug auf die Anzahl der Transaktionen schwierig sein, wenn Sie die Daten zurück auf eine Disc für jeden.

schreiben

Wenn Sie sich leisten können einige Updates zu verlieren, werden Sie wahrscheinlich auf Disc mit ziemlich billiger Hardware alle 100ms ohne Probleme spülen könnten, wenn Sie Ihre Datenbank und Betriebssystem-Unterstützung, das zu tun.

Wenn es wirklich eine In-Memory-Datenbank, die Sie nicht wollen, oft auf einer Disc spülen, das klingt ziemlich trivial. Ich habe gehört, dass H2 ist ziemlich gut, aber SQLite kann auch funktionieren. Eine richtig abgestimmt MySQL-Instanz könnte es auch tun (aber kann mehr gewunden sein)

Chronicle Map ist ein reine Java Schlüsselwertspeicher

  • es hat wirklich hohe Leistung, Erhaltung 1 Millionen schreiben / Sekunde aus einem einzigen Thread . Es ist ein Mythos, dass eine schnelle Datenbank kann nicht in Java geschrieben werden.
  • Nahtlos speichert und lädt alle serializable Java-Objekte, bietet eine einfache Schnittstelle Map
  • LGPLv3

Da Sie nicht viele „Tabellen“ eine ausgewachsene SQL-Datenbank ein Overkill Lösung sein könnte, Indizes und Abfragen können als mit einer Handvoll von verschiedenem Schlüsselwert speichert umgesetzt werden könnte, die manuell von Vanille Java-Code aktualisiert werden. Chronicle Karte bietet Mechanismen solches Updates gleichzeitig voneinander getrennt zu machen, wenn Sie brauchen es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top