2017-04-21 26 views
0

テストのために、Googleが提供するLocalDatastoreHelperクラスを使用して、クラウドデータストアエミュレータのローカルインスタンスを開始します。Google Datastoreエミュレータ

興味深いobersvation、私たちは「ライブ」ストアに対してそれを行うならば、我々はGQLクエリに

SELECT [..] WHERE myfield = true

を実行することにより、我々のコードとデータを挿入し、再びそれを見つけることができ、だった作られましたGoogle Cloudでホストされています

しかし:

我々はローカルで実行しているエミュレータに対して同じコードを実行すると、挿入は動作しますが、クエリはありません。 findAll()は正常に動作するので、挿入と読み込みは一般的に動作しますが、何とかインデックスがありません。

時間のドキュメントを読んだ後、私はヒントが見つかりませんでした。なぜこれが起こるのでしょうか。

誰でも手伝いできますか?

答えて

0

私の元の質問に人を混同しないように、私は問題の原因を見つけたので、自分自身に答えます。

残念ながら、ライブとローカルの違いは、データストア側の動作の違いによるものではありませんでしたが、私たちのコードに根差していました。私の知る限り、生成されていないインデックスに関するすべての私達の元の仮定が偽で見るよう:-(

。その点では、ローカル振る舞うライブがまったく同じよう。

が貢献してくれてありがとう!

1

あなたが実行しているものは、おそらく最終的な一貫性です。デフォルトでは、データストアエミュレータは0.9の一貫性をシミュレートします。 WHERE句がKeyであるか、またはクエリがAncestor Queryでない限り、ほとんどのクエリは最終的に一貫性があることに注意してください。私はあなたが「生きている」店が結果を返すということはただの運命だと信じています。テストを1日のうちの異なる時間に十分な時間実行すると、結果が返されない可能性があります(すべてがインデックスの更新に要するタイミングと時間に依存します)。

つまり、データストアエミュレータには、シミュレートする整合性レベルを指定するオプションがあります。これは、次のコマンドで実行できます。

gcloud beta emulators datastore start --data-dir=/my/data/dir --host-port localhost:9999 --consistency 1.0 

整合性レベルが1.0の場合、一貫性のある読み取りが保証されます。 LocalDatastoreHelperで一貫性レベルを設定するオプションがあるかどうかはわかりません。

ここでも、「ライブ」データストアは、上記の例外を除いて、すべてのケースで常に一貫しています。

+0

いただき、ありがとうございますあなたのアドバイス! 私は一貫性の側面を見ていきます。 –

関連する問題