現在、代替データ ストアの概念実証を開発中です。その理由は、ほとんどが読み取り専用のクラスター化された webapp を拡張する必要があるためですが、時には過度に複雑な ORM+RDBMS ソリューションの苦痛から解放されたいからでもあります。
全体的な考え方は、永続性を備えた分散キャッシュ(クラスターを SoR にする)と非常によく似ていますが、次のようになります。
- ID(クラスとIDを提供する)によって、その子とともに任意のオブジェクトを取得できるようにしたい[メインのクエリ部分はすでにアプリのluceneで解決されているため、開始するだけ]。
- タイプのマップのマップ (リレーショナルな世界では ~ テーブル) が必要であり、そこには「脱水された」格納オブジェクトの分散マップ (リフレクション ディープ クローニングによるオブジェクト グラフの平坦化) が必要です。
- ビンログ (Prevayler など)
- クラスター全体がダウンした場合の最終的な回復
- 開発 (およびコードをリファクタリングする能力 / 構造を変更する能力)
- おそらく他の目的(レポートなど)のために非同期に処理されます
- 最終的には、LINQ、Jaque、H2 の JaQu などの静的に型指定されたクエリ メカニズムの統合を試みます / ODB を参照 / Lucene (?)
- トランザクションに対応している必要があります(ただし、「JTAタイプ」は不明です)
このアイデアを Hazelcast (非常にシンプルな API が気に入っています) または Terracotta (使用したことはありませんが、それらの「スイート スポット」である中期データは認識しています) を使用して実装する予定です。もしよろしければ、私の目標は多かれ少なかれジョナスがかつてブログで書いたことをすることです。これらのいずれかを使用すると、格納されたデータはクラスターの JVM ヒープの合計にほぼ収まる必要があります。
これはスケーリングが非常に簡単で、リレーショナル インピーダンスの不一致 (ODB のように保存) と JDBC + I/O オーバーヘッドを回避できます。
私が無視している他のツール/フレームワーク、またはそれらの組み合わせがすでに同様の機能を提供していることを知っていますか? この「DB を取り除く」ことに取り組む他の方法を提案できますか? このアイデアには、すでにどのような欠陥がありますか? 並行性に関しては、Java の代わりに Scala を検討することは理にかなっていますか?
Couch DB、Neo4j、HyperTable、HBase などの非リレーショナル データ ストアはどうですか?
同様の質問が 1 か月前に行われましたが、具体的な解決策はありませんでした。
ところで、エンタープライズ データ ファブリックの概念に出くわしましたが、驚いたことに、これらのアイデアの多くが説明されています。