Ich entwickle derzeit einen Proof of Concept für ein alternativer Datenspeicher . Der Grund dafür ist, dass ich eine überwiegend geclusterte Webanwendung verbessern muss, aber auch, weil ich mich von dem Schmerz der manchmal übermäßig komplexe ORM+RDBMS-Lösung .
Insgesamt ist die Idee einem verteilten Cache recht ähnlich mit Ausdauer (wobei der Cluster der SoR sein soll):
- ein beliebiges Objekt zusammen mit seinen Unterobjekten abrufen können, indem id (unter Angabe von Klasse und id) [nur das für den Anfang, da der Haupt Abfrage Teil ist bereits mit Lucene in meiner app gelöst].
- müssen Karten von Typen haben ( ~ Tabellen in der relationalen Welt) und darin verteilte Karten von "dehydrierten" gespeicherten Objekten (Abflachung des Objektgraphen durch Reflection Deep Cloning)
- ein Speicherprotokoll (wie z. B. Prevayler) für
- eventuelle Wiederherstellung bei Ausfall des gesamten Clusters
- Entwicklung (und Fähigkeit zum Refactoring von Code/zur Änderung der Struktur)
- eventuell asynchrone Verarbeitung für andere Zwecke (Berichterstattung, was auch immer)
- eventuell später versuchen, einen statisch typisierten Abfragemechanismus zu integrieren, wie LINQ, Jaque oder JaQu von H2 / siehe ODBs / Lucene (?)
- es muss transaktionsfähig sein (allerdings ist der "JTA-Typ" nicht sicher)
Ich plane, diese Idee mit Hazelcast (ich liebe seine supereinfache API) oder Terracotta (das ich nie benutzt habe - aber ich bin mir ihres "Sweet Spots", der mittelfristigen Daten, bewusst) umzusetzen. Wenn Sie so wollen, ist mein Ziel, mehr oder weniger zu tun worüber Jonas einmal gebloggt hat . Bei der Verwendung eines solchen Systems müssten die gespeicherten Daten ungefähr in die Summe der JVM-Heaps des Clusters passen.
Dies sollte ziemlich einfach zu skalieren sein, würde die relationale Impedanzfehlanpassung (d.h. speichern wie bei einer ODB) und JDBC + E/A-Overhead vermeiden.
Kennen Sie andere Tools/Frameworks oder Kombinationen davon, die bereits ähnliche Funktionen bieten, die ich übersehe? Können Sie andere Wege vorschlagen, wie man dieses "Loswerden der DB" angehen kann? Welche Schwachstellen sehen Sie bereits in dieser Idee? Wäre es aus Sicht der Gleichzeitigkeit sinnvoll, Scala anstelle von Java in Betracht zu ziehen?
Was ist mit nicht-relationalen Datenspeichern wie Couch DB, Neo4j, HyperTable, HBase?
A ähnliche Frage wurde vor einem Monat gefragt, aber es gab keine konkrete Lösung.
Übrigens bin ich gerade über das Konzept der Enterprise Data Fabric in dem zu meiner Überraschung viele dieser Ideen beschrieben werden.
0 Stimmen
"meist schreibgeschützt" ist "meist lesend".