'nosql'で、テーブル/エンティティを'非正規化'する必要があるbigtableのような制限があることを知っていますか?
コードを1回記述でき、Google App Engineのbigtableとnosqlに使用できるAPIラッパーはありますか?(ヒベラネートのようなもの)
2 に答える
はい、たとえばMongoDBでは、非リレーショナルであるため結合がありません。そのため、データの保存と参照の方法が変わります。
MongoDBは非リレーショナル(結合なし)であるため、ドキュメント間の参照(「外部キー」)は通常、サーバーへの追加のクエリによってクライアント側で解決されます。MongoDBでの参照には、2つの規則が一般的です。1つは単純な手動参照、もう1つは多くのドライバーが明示的にサポートするDBRef標準です。
結合とマージのロジックをアプリケーションレベルで実行して、分散データをすべて結合するコストを回避するために、読み取りを高速化するために非正規化と複製を行うことがコンセンサスのようです。
データベースを非正規化することが絶対的な要件であるかどうかについては、私にはわかりません(他のSOメンバーがおそらく私たちを啓発することができます)。しかし、データベースは、データがどのように照会されるかについての十分な研究とともに、これらの「制限」を念頭に置いてモデル化する必要があると思います。これにより、プロセスへのインピーダンスが最小になります。
関連項目:
コードを1回記述でき、Google App EngineのBigTableとnosqlに使用できるAPIラッパーはありますか?(Hibernateのようなもの)
JDOはデータストアに依存しないため、ある程度必要なものを提供するだけの場合があります。
「NoSQL」製品でJDOとJPAを使用する最近のプロジェクトがたくさんあるようです。
見る:
コードを 1 回記述するだけで、Google アプリ エンジンの BigTable と nosql に使用できる API ラッパーはありますか? (休止状態のようなもの)
抽象化ライブラリは確かに移植性に役立ちますが、実行している特定のプラットフォームを考慮する必要があります。Google App Engine を使用する場合は、追加の抽象化ライブラリに固有の起動コストが発生することに注意する必要があります。
JDO や JPA などを使用することの長所と短所を比較検討する必要があります。また、App Engine データストアに結合されるという欠点がある、よりネイティブなインターフェイスを提供するObjectify ライブラリも見てください。