将DatastoreKey对象存储在字符串上作为参考利润?

时间:2018-05-07 11:53:29

标签: google-cloud-datastore

将DatastoreKeys存储在实体属性中的普通字符串上是否有任何优势?

我们说我们有这个实体:

{ 
    someForeignKey: DatastoreKey
}

只有DatastoreKey类型的字段。 如果我只存储一个简单的密钥字符串,如果我们认为没有使用名称空间,或者字符串只引用名称空间作用域中的实体,那么会有什么不同吗?

{
    someForeignKey: string
}

2 个答案:

答案 0 :(得分:1)

数据存储区密钥不仅仅是一个字符串,它实际上是一组密钥类型和密钥标识符的列表,用于描述外键的整个实体祖先。是的,它可以表示为单个字符串(例如,至少某些客户端库具有获取相应urlsafe字符串的方法)。

我看到存储密钥的优点是:

  • 它包括密钥类型检查(但请注意,密钥的实体实际上不必存在),这不能为字符串做
  • 它可以原样用于访问外部实体,一个字符串必须转换回一个键才能这样做

在这种情况下,命名空间确实没有任何意义。

答案 1 :(得分:1)

Dan Cornilescu条评论外,我还会在official documentation key description下面复制:

  

Cloud Datastore中的每个实体都有一个唯一标识它的密钥。   密钥由以下组件组成:

     
      
  • 实体的名称空间,允许multitenancy
  •   
  • 实体的kind,它将其归类为Cloud Datastore查询。
  •   
  • 单个实体的identifier,可以是:      
        
    • 一个键名字符串。
    •   
    • 整数数字ID。
    •   
  •   
  • 在Cloud Datastore层次结构中定位实体的可选ancestor path
  •   
     

应用程序可以从Cloud Datastore获取单个实体   使用实体的密钥,或者它可以通过检索一个或多个实体   根据实体的键或属性值发出query