1

NDB はいくつかの非常に優れた機能を提供し、独自のキャッシュ レイヤーで実装する場合よりも一般的に最適化されるはずなので、NDB の使用を開始しています。

ただし、key.get() のような単純な操作で何が起こっているのかをすべて理解しているわけではありません。Appstats は、このような操作中に、起動したばかりの開発サーバーで 4 つの RPC が作成されることを示しています。

@434ms memcache.Get real=1ms api=0ms
@437ms memcache.Set real=1ms api=0ms
@438ms memcache.Get real=2ms api=0ms
@441ms datastore_v3.Get real=4ms api=0ms

memcache.Get ops が 2 つあるのはなぜですか? memcache.Set が datastore_v3.Get の前に表示されるのはなぜですか? デフォルトのキャッシュ オプションを使用します。ndb.context.get を見ると、いくつかの洞察が得られますが、まだ混乱しています。memcache.Set は LOCK について作成されます。しかし、2 つの Get 呼び出しは同じように見えますが、データストアの Get の直後に Set がないのはなぜですか?

4

1 に答える 1

2

トップレベル関数または WSGI アプリケーション オブジェクトの周りで @ndb.toplevel() を使用しましたか? それを省略すると、実際の Set 呼び出しが実行されないというよくある問題です。http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=105を参照してください(コメント 5 のグループへのリンクをたどってください!)。

于 2012-04-18T04:54:26.953 に答える