2016-07-27 8 views
0

この質問は非常に基本的ですが、私はアンドロイドのアプリにはSQLストレージを見ていない始めたと私は私の知る限り理解されるように、CRUD操作を行うためのAPIを公開App Engineのエンドポイントとサーブレットを発見した場合。私のために把握することは困難であることJavaのPOJOクラスと申し訳ありませんのSQLデータストア

事が格納されたオブジェクトのフォーマットであり、それは効率です。私はobjectify/gsonのようなライブラリを使ってオブジェクトがjsonに格納されていることを読んでいます。

は今、私は人のリストである属性友人を持っているクラスPersonがあるとします。 2人の異なる人物が同じ友達を共有する場合、それは2つの異なるjsonオブジェクトに格納され、情報が複製されます。私は友人のIDを保持するストレージとは別のクラスを作成する必要があります人のハッシュマップから/彼女の友人を見つける人を読み込むとき?しかし、これは、友人のない人を探したいだけであっても、WebサービスのすべてのPersonにそのマップを作成するよう要求することを意味します。

もう一つの方法は、サーバ側の「クエリ」を作る要求している人の友人オブジェクトを返すと、他の人の将来の「クエリ」のハッシュマップにそれらを置くことであろう。このようにして毎回データを転送することは少なくなりますが、毎日のリクエスト制限制限を使い果たすようになる可能性のあるWebサービスをもっと多く消費します。

もう一度申し訳ありませんが、初心者の質問です。私は、この問題を解決するためのあらゆる方向性、パターンを歓迎します。つまり、スペースストアオブジェクトの感覚を効率的に検索し、効率的に検索する方法は、Webサービスからのクエリとデータ転送量の意味でnosqlデータベース。

答えて

1

Google Cloud Endpointsでは、1つまたは複数のAPIを通じてCRUD操作を行うことができます。しかし、ドキュメント(https://cloud.google.com/appengine/docs/java/endpoints/)に詳しく説明されているように、それ以上のことを行うことができます。など「グーグルクラウドストレージ、メール、タスクキューなどのApp Engineで利用可能なサービスと機能のすべて」

あなたのエンドポイントのバックエンドデータストアであるときは、客観化を使用することができます。 Objectifyは、Googleが推奨するJavaのオープンソースAPIです。ただし、データはjsonとしてストアされるのではなく、異なるデータ型のプロパティを持つことができる「エンティティ」と呼ばれるデータオブジェクトとして保存されることに注意してください。詳細はhttps://cloud.google.com/appengine/docs/java/datastore/entitiesを参照してください。

NoSQLデータベースへのアプローチは、データモデリングに関してはリレーショナルデータベースとは大きく異なります。データを正規化して同じデータを複数回保存することは、非常に一般的なアプローチです。あなたのケースでは

二人が同じ友人を共有している場合、あなたは一人一人のエンティティで、フレンド情報を2回保存します。このようにして、1人の友人のリストを照会するときは、エンドポイント内のObjectifyを使用してpersonエンティティを取得するだけで済みます。これは、友人のリストを含み、正面に送信されると自動的にJSONに変換されます-終わり。

私は、Googleの例(https://cloud.google.com/appengine/docs/java/endpoints/helloworld-java-maven)を試す勧めまたはより良いあなたがスタック全体にRominイラニからhttps://www.udacity.com/course/developing-scalable-apps-in-java--ud859

チュートリアルを理解するのに役立ちますどのUdacity MOOCをたどるも、この技術https://rominirani.com/google-cloud-endpoints-tutorial-part-1-b571ad6c7cd2#.p4h8rmkt3に優れたエントリー・ポイントですEclipseとAndroid Studioのチュートリアルがあります(2番目の方法をお勧めします)。

+0

あなたのご意見ありがとうございましたが、重複した情報を格納できるSqlがない場合は、更新後の矛盾をどのように扱うべきですか?私が人Bを更新したとします。友人としてBを持っているすべての人を更新する必要がありますか?それほど効率的ではありません – MithPaul

+0

NoSQLデータモデリングの古典的な複雑さを正確に指摘していると思います。人物のエンティティに人の友人のRef を格納することによって、外部キーのリレーショナルデータベースの概念を模倣することができます。エンティティに関するObjectifyのドキュメントを参照してください。しかし、この場合は、すべての友人と一緒に人を取得したいときに、その人のすべての友人をフェッチする必要があり、これがパフォーマンスに重要な影響を与える可能性があります。それはあなたの正確なニーズに左右され、いくつか選択する必要があります。 Web上のNoSQL哲学、特にこのようなトレードオフに関する重要な文献があります。 –

+0

Cloud Endpointsには、GCPが提供する「完全管理のMySQLデータベースサービス」であるCloud SQLを使用することもできます。 –

関連する問題