20

これまで、App Engine の全文検索を使用して、データストア内の既存のエンティティを検索してきました。Documentこれには、エンティティごとに少なくとも 1 つを作成し、2 つを何らかの方法でリンクすることが含まれます。エンティティを変更するたびに、対応するDocuments.

私の質問は、すべてのデータを に保存して、DocumentsDatastore エンティティを忘れてはどうですか? 検索 API は、データストアとは異なり、複数の不等式フィルターとブール演算子を処理できる、より豊富なクエリ言語をサポートしています。

データストアを完全に置き換えるために検索 API を使用することを妨げる検索 API の設計について、何か不足していますか?

4

5 に答える 5

7

Javaのドキュメントによると

ただし、インデックス検索で検索できる一致するドキュメントは 10,000 件までです。非常に大きな結果セットを取得する必要があるアプリケーションには、App Engine データストアの方が適している場合があります。

私はそれを一般的なユースケースとは考えていませんが。

より現実的には、データストアを使用すると、エンティティをキーで取得する方がはるかに安価になります (おそらく高速でもあります)。検索 API を使用すると、Index.get() を使用して ID でドキュメントを検索するか、ID をフィールドに格納してそのフィールドを検索することで ID を複製できます。

費用の内訳は次のとおりです。

- Index.get():     $0.10 /  10,000 or 0.00001 per get
- Index.search():  $0.13 /  10,000 or 0.000013 per get
- Datastore get(): $0.06 / 100,000 or 0.0000006 per get

ご覧のとおり、Datastore の get は Search API オプションよりもはるかに低コストです (Index.get() の 16 倍の低コスト)。

直接取得を多く使用し、複雑な検索をほとんど使用しないようにデータが構造化されている場合、データストアは明らかにコスト面で優れています。

注: Index.search() メソッドを使用して重複データを保存するための追加コストは含めませんでした。これは、保存するエンティティの数に依存するためです。

于 2013-08-20T17:37:23.027 に答える
5

データを両方に入れるだけです。ストレージは安価であり、アプリの書き込み量によっては、更新も安価になる可能性があります。簡単なクエリとキーによる単一エンティティの取得には、memcache とデータストアを使用します。複雑なクエリには検索 API を使用します。価格が発表されたら、トレードオフを行う必要があります。

于 2012-10-18T17:48:27.157 に答える
4

現在、エンティティを入れるたびにsearchdocにインデックスを付けており、エンティティのシリアル化されたバージョンにもインデックスを付けています。
実際には、データストアから同じ量のエンティティを取得するよりも、検索 API を介してドキュメントを検索し、シリアル化されたフィールドを抽出する方 がはるかに高速です。

于 2012-10-18T18:47:11.987 に答える
3

あなたはそうしませんか:

  1. memcache の利点を失う

  2. より低いクォータに直面します。「この機能が実験段階から卒業したら、無料の割り当てで 1 日あたり約 1,000 回の検索がカバーされると予想しています」取得した読み取り数はわかりませんが、データストアの方が多いと思います。https://developers.google.com/appengine/docs/quotas#Resourcesを見ました

    また、エンティティの更新については、更新または新規プットによって異なる料金が請求されます。インデックスは更新されていないようですが、新しいドキュメントとして追加されているようです (それはとにかく私がやっていることです)。インデックスの価格設定の詳細がわからないため、正確に知ることは困難ですが、エンティティの 1 つまたは 2 つのインデックス付きの値を更新すると、新しい全体のインデックスを配置するよりも安価になる可能性があります。それは私が推測するあなたのデータに依存します。

    最後に、インデックスの合計インデックス サイズは 250M になりましたが、データは 1 GB に制限されています。データストアはそれよりも大きく、インデックスの追加の価格設定コストについてはまだ何も言われていません.

  3. バックアップ計画を立てる必要があります。とにかく、インデックスが破損した場合にインデックスをバックアップまたは復元する方法がわかりません。エンティティにデータがあるということは、検索インデックスを再作成できることを意味します。これで、データストアの管理コンソールを使用してバックアップできます。

于 2012-06-08T22:13:45.997 に答える
1

大規模なデータ セットをクエリするためのパフォーマンス コストに加えて、データストアには強力な一貫性のあるデータを使用できるという利点もあります。強整合性データと結果整合性データの詳細については、このリンクを参照してください。

Search API インデックスに格納されたドキュメントは最終的に一貫性があると想定する必要があります。

于 2016-11-26T20:58:07.070 に答える