Python と ndb を使用して作業を行っていますが、その理由がわかりません。ケースと上記のコードを投稿します。
models.py
class Reference(ndb.Model):
kind = ndb.StringProperty(required=True)
created_at = ndb.DateTimeProperty(auto_now_add=True)
some_id = ndb.StringProperty(indexed=True)
data = ndb.JsonProperty(default={})
これらのテストは、インタラクティブ コンソールと dev_appserver.py への --high_replication オプションで実行されています。
テスト 1
from models import Reference
from google.appengine.ext import ndb
import random
some_id = str(random.randint(1, 100000000000000))
key_id = str(random.randint(1, 100000000000000))
Reference(id=key_id, some_id=some_id, kind='user').put()
print Reference.query(Reference.some_id == some_id, Reference.kind == 'user').get()
# output:
# >> None
どうして ?????それでは、印刷する前に sleep(1) を追加しましょう。
テスト 2
from models import Reference
from google.appengine.ext import ndb
import random
from time import sleep
some_id = str(random.randint(1, 100000000000000))
key_id = str(random.randint(1, 100000000000000))
Reference(id=key_id, some_id=some_id, kind='user').put()
sleep(1)
print Reference.query(Reference.some_id == some_id, Reference.kind == 'user').get()
# output:
# >> Reference(key=Key('Reference', '99579233467078'), createdAt=datetime.datetime(2013, 1, 31, 16, 24, 46, 383100), data={}, kind=u'user', some_id=u'25000975872388')
K、ドキュメントをすべての Google のテーブルに展開する時間をエミュレートしていると仮定しましょう。コードをスリープ状態にすることはありません。それでは、スリープを削除して親を追加しましょう!
テスト 3
from models import Reference
from google.appengine.ext import ndb
import random
from time import sleep
some_id = str(random.randint(1, 100000000000000))
key_id = str(random.randint(1, 100000000000000))
Reference(id='father', kind='father').put()
Reference(parent=ndb.Key(Reference, 'father'), id=key_id, some_id_id=some_id, kind='user').put()
print Reference.query(Reference.some_id == some_id, Reference.kind == 'user', ancestor=ndb.Key(Reference, 'father')).get()
# output:
# >> Reference(key=Key('Reference', '46174672092602'), createdAt=datetime.datetime(2013, 1, 31, 16, 24, 46, 383100), data={}, kind=u'user', some_id=u'55143106000841')
今、それは紛らわしいです!親を設定するだけで、強い一貫性が得られます! なんで ?また、強い一貫性を確保するために必要な場合は、デフォルトで、データストアに挿入するときにすべてのドキュメントを同じ親にしないのはなぜですか? 多分私はそれを完全に間違っており、それをより良くする方法があります。お願いします、誰か私を導いてください!
前もって感謝します