Google App Engineに結合しない場合、データは1つの大きなテーブルに存在する必要がありますか?

StackOverflow https://stackoverflow.com/questions/810303

質問

Google App Engineは結合を許可しないので、これはWebアプリのすべてのテーブルを取得し、それらを1つの巨大なテーブルに結合する方法を見つけ出す必要があることを意味しますか?

役に立ちましたか?

解決

DBMSによって結合が実装されていないからといって、複数のテーブルを作成できないわけではありません。 App Engineでは、これらは「エンティティタイプ」と呼ばれ、必要な数だけ持つことができます。

通常、頻繁な結合の必要性を避けるために、データを非正規化する必要があります。避けられないいくつかの状況では、ユーザーコードで結合を行うなど、他の手法を使用できます。

他のヒント

1つの大きなテーブルに結合することは常にオプションですが、ほとんどの場合、不必要に大きく冗長なテーブルが作成されるため、アプリが遅くなり、メンテナンスが難しくなります。

クエリの結果を反復処理し、最初のクエリで見つかった各結果に対して2番目のクエリを実行することにより、結合をエミュレートすることもできます。 SQLクエリがある場合

SELECT a.x FROM b INNER JOIN a ON a.y=b.y;

次のようなものでこれをエミュレートできます:

for b in db.GqlQuery("SELECT * FROM b"):
  for a in db.GqlQuery("SELECT * FROM a WHERE y=:1", b.y):
    print a.x

データテーブルを設計する方法を探している場合。作業を開始する前に、少し調査することをお勧めします。 Google App Engineには、次のような非常に魔法のようなプロパティがあります。

  • 自己結合
  • 複数値リストのプロパティ

これは、設計に非常に役立ちます。 ここでの経験を共有しました。

拡張性について学ぶために、ここにあるUdacityの専用無料コースがあります。トピック。 reddit.comの創設者が教えており、訪問者数が最も多いサイトの1つであるredditで起こっているスケーリングの全体を明確に説明しています。彼はコースデモの実装全体をgaeで示しています(それは私にとって大当たりでした!)。 ここから無料でダウンロードできます。これらのリソースを手に入れる前に、アプリエンジンで苦労していました。だから、これを共有することは、水に足を踏み入れている他の人を助けるかもしれないと思った。

リレーショナルデータベースからApp Engine Datastoreに切り替えるには、開発者がデータをモデリングするときにパラダイムシフトが必要です。より良いアイデアを得るには、こちらをご覧ください。これには、データストアが課す制約に問題をどのように適合させるかについて事前に考える必要がありますが、可能であれば、迅速に実行されてスケーリングすることが保証されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top