App Engine数据存储区的复合关键性能

时间:2014-10-21 19:08:36

标签: google-app-engine google-cloud-datastore

我正在从实体“B”的自动生成ID为实体“A”创建字符串数据存储区ID。我应该在A ID前加上“A-PREFIX”-B.IntID(),还是用B.IntID()+“A-PREFIX?”

我认为我应该从B ID开始,因为它们是均匀分布的,以防止出现热点?

来自https://cloud.google.com/developers/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore

反模式#1:实体密钥的顺序编号

谢谢, 安德鲁

1 个答案:

答案 0 :(得分:3)

您根本不需要任何前缀。密钥由实体类型和ID组成。因此,如果两个实体属于不同类型,则它们可能具有相同的ID,并且仍然具有唯一的密钥。

这个例子非常合适(例如Java):

Entity userEntity = new Entity("User");
Long id = datastore.put(userEntity).getId();

Entity loginEntity = new Entity("Login", id);
datastore.put(loginEntity);

请注意,如果您使用Long ID并将其转换为String,则您的密钥将占用更多空间。所以使用Long作为id是一个更好的选择。