Google App Engine Datastoreに最適なアクセス方法に関する推奨事項はありますか? JDO、JPAまたはネイティブAPIを介して?GAEデータストアへのアクセス:JDO、JPAまたは低レベルのAPIを使用しますか?
JDO/JPAの明白な利点は、他のデータベースエンジンへの移植性ですが、それ以外にDatastore APIを直接使用しない理由は何ですか?
Google App Engine Datastoreに最適なアクセス方法に関する推奨事項はありますか? JDO、JPAまたはネイティブAPIを介して?GAEデータストアへのアクセス:JDO、JPAまたは低レベルのAPIを使用しますか?
JDO/JPAの明白な利点は、他のデータベースエンジンへの移植性ですが、それ以外にDatastore APIを直接使用しない理由は何ですか?
私はJPAについてよく分かりませんが、私はJDOに行ってきました。もしあなたが初めてならば、それはかなり険しい学習曲線と多くの無関係のものがありますGAE。あなたが勝つのはowned relationships,なので、データストアIDだけでなく、実際の参照を持つクラスを持つことができます。 @Element(dependent = "true")アノテーションのような、アノテーションを介してJDOが行う便利な機能もいくつかあります。親オブジェクトを削除することができ、JDOはすべての子を削除するため、かなりの作業を省きます。一般的に、GAEのドキュメントでは、JDOを効果的に使用するために知っておくべきことがたくさんあるので、データ核のドキュメントを読んで、フェッチグループに特に注意を払うことが重要です。
またhere.
最後に私が言及した客観化や小枝、2つの明らかに人気の代替フレームワーク、になり、ほとんどあらゆる考えられるシナリオに対処JDOとJPAのための簡潔な例の大規模なコレクションを見つけることができますquestion I asked私もこの決定をしようとしていました。
他のデータベースへの移植性については、GAEの移植性についての心配は少し間違っていると思います。 Googleは、GAEコードが移植性があると思うことを望んでいる限り、私はそのパイプの夢だと思っています。あなたは、Googleが提供するAPIの特定の組み合わせ、おそらくどこにも見られないかもしれないミックス、そしてGAEの多くの制限や特質を取り巻くコーディングを目標とするようにコーディングすることになるので、移植性を忘れるでしょうデータアクセスAPI実際、私がこの問題について私の決断を作り直すことができれば、オブジェクト化などのGAE用に特別に構築されたデータアクセスフレームワークを使用すると思います。
私はそれが味の問題だと思います。 ORMソリューション(JDO/JPA)は、通常、より快適なソリューションです。一方、低レベルのAPIは完全な柔軟性を可能にしますが、あなたはORMの制限に拘束されません。もちろん、より多くのコードを書く必要があり、独自のデータストア抽象化レイヤーを作成することもできます。後で特定のものを最適化する必要がある場合、これは便利になるかもしれません。
もちろん、JDO/JPAを使い始めることができます。柔軟性が必要であることがわかっても、コードの特定の部分をリファクタリングして、低レベルの機能を使用することができます。 tempyが述べたように、内部参照はIDとして保存されます(もちろんキーの場合と同じです)。
一般的に(SQLの世界では)多くの人が、低レベルのものを使用することによってデータベースについてより多くのことを学び、したがって最適化のためのより良い気分を得ると言います。 ORMを使用する人はたくさんいますが、ORMがすべての作業を実行すると考えるので、非常に非効率的に使用します。したがって、パフォーマンスやメンテナンスの問題が発生します。
最終的には、わからない場合はどちらの解決策も適切だと思います。しかし、JDO/JPAを選択した場合でも、低レベルを選択した場合でも、ベスト・プラクティスについて学ぶためには、利用可能なドキュメントをチェックし、記事を読んでください(ブログ)。
フィリップ
まあ、appengine-jrubyの方はdatamapperをお勧めしますが、dm-appengineアダプタが壊れているため、Rubyのシリアル化機能(=> memcache)を使用することはできません。 GoogleのApp Engineのドキュメントは本当に賞を受賞していません... – Philip