我正在使用Google Cloud Datastore并使用名称空间对数据进行分区。某些类型通过创建像这样的密钥来使用Cloud Datastore中自动生成的ID:
var key = Datastore.key([
'example'
]);
此代码将生成一个类型为“ example”的密钥,Cloud Datastore会自动为该实体分配一个整数数字ID。 (来源:https://cloud.google.com/datastore/docs/concepts/entities#kinds_and_identifiers)
但是此“唯一” ID仅对于其名称空间是唯一的。我在不同的命名空间中看到了相同的ID。
所以我的问题是,是否可以告诉Cloud Datastore自动生成的ID对于所有命名空间都必须是唯一的?
也许这个问题没有意义,但我希望在所有数据存储中都具有唯一的ID(如果可能)。
我已经在Cloud Datastore documentation中看到了“ allocateIds”函数,但是我想知道这个函数是否处理名称空间,因为我已经知道可以在请求中包含它们,而且我担心这些ID与Cloud Datastore自动生成的ID相同。
提前谢谢!
答案 0 :(得分:2)
否:您不能告诉数据存储区在所有实体组和名称空间之间分配唯一ID。
但是有一个简单的解决方法:如果您相信统计信息并正确植入了随机数生成器,那么通常您自己生成密钥GUIDs会更好。
如果您不相信统计信息和随机数,则仍然可以生成GUID,并在编写有问题的实体之前通过交易验证它是否在数据存储区中。
如果您真的很想让数据存储区为您分配ID,则可以手动进行呼叫AllocateIds,并要求它为常数键分配ID。 (例如,要求它在默认名称空间中分配一个任意(但不变)的键,它将返回一个整数,该整数在其他地方使用将是唯一的。)