我是Google CloudDatastore的新手,正在閱讀文檔。
(注:我們不打算使用谷歌的AppEngine,只是數據存儲只)Google Cloud Datastore - 是否可以爲單個根實體使用事務?
按照document,數據存儲區支持事務,但
If you want to use queries within a transaction,
your data must be organized into entity groups in such a way
that you can specify ancestor filters that will match the right data.
所以我想,只要我想用事務,我不得不創建一些父鍵,並將其設置爲祖先。父母的所有實體都有限制,即更新和事務只能每秒執行一次。
但是,我也看到插入的一個很簡單的例子,在這裏: https://cloud.google.com/datastore/docs/concepts/entities#datastore-insert-python
with client.transaction():
incomplete_key = client.key('Task')
task = datastore.Entity(key=incomplete_key)
task.update({
'category': 'Personal',
'done': False,
'priority': 4,
'description': 'Learn Cloud Datastore'
})
client.put(task)
它沒有指定父,並使用一個事務中一個根實體,不是嗎?甚至關於Transaction page中的示例,只有「只讀事務」的示例明確指定了父級。其他人在實際存在的情況下是否忽略父母?
我想知道我可以使用事務沒有實體組(=沒有大的性能下降),如果我可以指定一個根實體的關鍵,但在文件中沒有這樣的描述......
如果有人能夠澄清這一行爲,我將不勝感激。謝謝。
這樣做是否合法? --- (0)通過密鑰查找某個根實體並檢查其'版本'屬性 (1)開始一個事務 (2)再次查找實體並檢查'版本'。 (3-a)如果'version'與(0)相同,則更新該值並繼續執行 (3-b),否則其他進程觸及該實體,則跳過該作業。 (4)提交事務--- 基本上我想要實現的一種樂觀鎖單個實體可以同時處理一些任務,在這種情況下想知道如果我還是要準備一些類型的祖先給每一個實體以執行上述交易。 –
完全有效。作爲參考,我們的交易本身使用樂觀鎖定。如果你只是在讀寫,你不必擔心整個祖先的事情。它只考慮你是否在做SELECT/RunQuery。 –
好的,謝謝你的信息!這聽起來可以將我們現有的MongoDB堆棧遷移到完全託管的DataStore。我感謝你的快速回應:) –