NDB allocate_ids有與NDB allocate_ids()
這似乎是在NDB模糊區域相當多的問題,但我發現這個問題無處處理。與父母
當使用父/子層次,ids
應該是給定父鍵獨特,所以你可以創建
entity_1 = MyEntity(parent=my_parent_key_1, id=23)
entity_2 = MyEntity(parent=my_parent_key_2, id=23)
現在,當您需要分配的ID進行明確劃分,靜態函數MyEntity.allocate_ids()
以父母爲參數。因此,您將假定帶有父參數的allocate_ids()
爲給定的父級保留一定範圍的ID,而不是,對於任何父級。
但是:
MyEntity.allocate_ids(max=1000, parent=ndb.Key(MyParentEntity, 'aaa'))
回報(1L, 1000L)
。前1000個ID分配。現在運行:
MyEntity.allocate_ids(max=1000, parent=ndb.Key(MyParentEntity, 'bbb'))
回報(1001L, 1000L)
,這意味着第一個可用的ID爲1001L,並沒有什麼新的劃撥,儘管父鍵是不同的。
現在運行:
MyEntity.allocate_ids(max=2000, parent=ndb.Key(MyParentEntity, 'ccc'))
回報(1001L, 2000L)
,這意味着1001年至2000年被分配的ID。
因此它似乎allocate_ids
實際上是獨立的父鍵。你可能會想知道爲什麼通過parent_key作爲參數。
任何人有對此的解釋,或者可以指向與這種奇怪的行爲文檔?
和相關的問題:有沒有辦法知道什麼ID範圍(或範圍)已通過調用allocate_ids()
保留?
剛剛發現它比我想象的更糟糕:ID範圍被分配爲全NDB數據庫,而不是一個給定的實體。從前面的例子,如果我稍後做一個'MyOtherEntity.allocate_ids(100)',我得到(2001L,2100L)。即使它是用於另一個實體,分配的範圍也會跟在先前分配的範圍上。因此,不能有2種不同的實體類型,每種都使用用戶定義的分配的ID,比如1到1000,並且讓Ndb在此範圍之外分配自動ID。相反,第一個實體將獲得1到1000,下一個實體將獲得1001到2000. – patb
我認爲你期望太多看到@daniel的答案。 –