Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 密钥vs ID/名称?_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Google app engine 密钥vs ID/名称?

Google app engine 密钥vs ID/名称?,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我不想为我的实体创建自动生成的密钥,因此我指定自己的密钥: Entity employee = Entity.newBuilder().setKey(makeKey("Employee", "bobby")) .addProperty(makeProperty("fname", makeValue("fname").setIndexed(false))) .addProperty(makeProperty("lname", makeValue("lname").s

我不想为我的实体创建自动生成的密钥,因此我指定自己的密钥:

Entity employee = Entity.newBuilder().setKey(makeKey("Employee", "bobby"))
        .addProperty(makeProperty("fname", makeValue("fname").setIndexed(false)))
        .addProperty(makeProperty("lname", makeValue("lname").setIndexed(false)))    
        .build();

CommitRequest request = CommitRequest.newBuilder()
    .setMode(CommitRequest.Mode.NON_TRANSACTIONAL)
    .setMutation(Mutation.newBuilder().addInsert(employee))
    .build();
datastore.commit(request);
当我检查实体的外观时,它是这样的:


如果我指定了自己的密钥(bobby),为什么会生成自动生成的密钥?看起来bobby也是被创造出来的,但现在我有了bobby和这个自动生成的密钥。键和id/名称之间有什么区别?

您使用
makeKey(“员工”、“鲍比”)创建的键是实体名为
Employee
且名称为
bobby
的实体的键。您在数据存储查看器中看到的关键点正是这一点的表示

一般来说,钥匙总是由

  • 可选父键(具有实体类型和名称/id)
  • 实体类型
  • 实体名称/标识

也许这里有人可以告诉您如何将密钥解码为其组件,但请确保您所做的一切都是正确的,并且行为符合预期。

这是您的密钥的url安全版本,适合在链接中使用。使用将其转换为实际键,您将看到它包含您的字符串名称。

您不能指定自己的键,键实际上包含数据存储操作所需的信息。中的此说明为您提供了一个想法:

注意:URL安全字符串看起来很神秘,但没有加密!信息技术 可以轻松解码以恢复原始实体的种类和 标识符:

key = Key(urlsafe=url_string)
kind_string = key.kind()
ident = key.id()
如果您使用这样的URL安全密钥,请不要使用电子邮件等敏感数据 作为实体标识符的地址。(一种可能的解决办法是使用 敏感数据的MD5散列作为标识符。这将停止第三次 当事人,谁可以看到加密的密钥,从使用它们来收获 电子邮件地址,但这并不能阻止他们独立使用 生成他们自己的已知电子邮件地址哈希并使用它 检查数据存储中是否存在该地址。)

键的
ID
部分是什么,是数字还是字符串:

密钥是一系列种类ID对。您希望确保每个实体 具有在其应用程序和命名空间中唯一的密钥。一 应用程序无需指定ID即可创建实体;这个 数据存储会自动生成数字ID。如果应用程序 “手动”选择一些ID,它们是数字的,应用程序允许 数据存储自动生成一些ID,数据存储可能会 选择应用程序已使用的一些ID。为了避免,这个 应用程序应该“保留”它将用于 选择ID(或使用字符串ID完全避免此问题)