2010-12-29 10 views
6

Mehrere Male wollte ich eine Datenstruktur, die einer SQL-Tabelle ähnelt , wo Sie auf verschiedenen Feldern und mehreren Feldern auswählen können. Ähnlich wie bei einer SQL-Implementierung im Speicher, außer dass ich nicht so viele Objekte in der Datenstruktur speichern möchte.Java im Speicher SQL-Tabelle wie Datenstruktur

Ich brauche auch das Objekt serialisierbar durch Java-Standard-Mittel.

Ich habe dies zuvor mit mehreren Hash-Tabellen oder benutzerdefinierten Hash-Schlüssel getan, aber es endete eine Menge Code und sehr spezifisch das Problem.

Ich habe auch Groovy mit seiner Schließung Fähigkeit und Gpath zu helfen, aber ich habe es nicht immer verfügbar (verschiedene Projekte).

EDIT: Ich glaube, mein Problem mehr eines Objekts Traversal/Auswahlproblem ist Hier sind einige interessante Projekte:

jedoch der Nachteil auf die meisten dieser Projekte ist, dass sie viel langsamer sind, als die Objekte direkt Zugriff (non Reflexions Get-/Set) und auf jeden Fall langsamer als einem Index (hash).

+0

Möchten Sie einen eigenständigen Snapshot von Daten abfragen? Was ist mit Multithreading, Sperren, Transaktionen, Einfügungen/Updates? Wenn eine der oben genannten Möglichkeiten möglich ist - ich stimme zu 100% mit @Alex überein. – Osw

+0

@Osw Nein das rein aus Bequemlichkeit. Ich brauche die ACID-Natur von RDBMS nicht. Ich brauche die Abfragefähigkeit. –

+0

denke, diese Links könnten hilfreich sein: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html und http://almaer.com/blog/hibernate-3-testing- with-in-memory-pluggable-persistence – Osw

Antwort

3

JavaDB und HSQLDB, unter anderem, haben vollständig In-Memory-Datenbanken.

+0

Das Problem mit diesen Leuten ist, dass ich keine Datenstrukturen bekomme, die ich marshalen/serialisieren kann. Ich suche nach etwas, das ich XStream kann. –

+0

Obwohl ich denke, ich könnte eine Art von generischen Datenobjekt zu einer Tabelle und auf unmarshal wird auf eine In-Memory-Singleton rdbms geladen werden, aber das hat Probleme mit Thread-Sicherheit, wenn es nicht threadsicher ist und viele Thread-Blockierung, wenn es ist. –

+0

Ich bezweifle, dass Sie etwas finden, das beide Anforderungen erfüllt. Mein Vorschlag: Verwenden Sie ein serialisierbares POJO, um einen Snapshot der Tabellen in der In-Memory-DB zu erstellen, und serialisieren Sie dann das. Der umgekehrte Weg wäre auch trivial, einfach den XStream in ein POJO entpacken und dann die Daten in die In-Memory-Datenbank laden. – RobertB

2

Was beschäftigt Sie mit der Verwendung von In-Memory-SQL-Speicher für diese Zwecke? Sie würden eine Menge Entwicklungszeit einsparen; Performance Overhead ist wirklich unbedeutend. Sie riskieren viel mehr, indem Sie versuchen, dies selbst zu implementieren.

+2

Es klingt wie (für mich jedenfalls) er suchte nach einer Alternative, um sein eigenes zu bauen. Auch dies ist keine wirkliche Antwort und könnte besser als ein Kommentar zu der ursprünglichen Frage sein. – RobertB

+0

Ich möchte nicht mein eigenes bauen (daher das Q). Ich kann nicht nur eine In-Memory-Datenbank verwenden, die Tabellen sind nicht serialisierbare Datenstrukturen. Mit anderen Worten, ich kann keine ganze db-Tabelle über die Leitung durch JAXB senden (geben Sie hier Ihre bevorzugte Serialisierungstechnologie ein) oder speichern Sie sie in einer Datei. –

Verwandte Themen