【问题标题】:AppEngine Datastore: byte slice vs datastore.ByteStringAppEngine Datastore:字节切片与 datastore.ByteString
【发布时间】:2016-08-15 12:47:04
【问题描述】:

我需要一个具有短字节序列的属性,但我不需要该属性的索引。 datastore.ByteString 属性类型用于短字节序列并被索引,而普通的[]byte 属性用于更长的字节序列并且被索引。

我不得不使用[]byte,因为我不需要索引,它会为我节省额外的写入成本,但我使用datastore.ByteString 是否更好,因为它适用于短值?这样做有什么好处吗?

【问题讨论】:

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


    【解决方案1】:

    datastore.ByteString 类型实际上只是一个普通的[]byte 切片,请参阅它的声明:

    type ByteString []byte
    

    不同之处在于,如果您有ByteString 类型的属性,AppEngine 将默认尝试对其进行索引。由于数据存储索引整体的长度有限,ByteString 值的长度最多只能为 1500 字节才能被索引。

    ByteString 也没有任何额外的方法可以增加除了可索引性之外的一些好处。

    如果您不打算为您的资源编制索引,只需使用[]byte。如果您打算索引它,因为您想搜索/过滤它,那么您必须使用ByteString。例如,如果您想存储某些内容(例如文件)的哈希值,并且您想根据其内容哈希值搜索文件,这将很有用。在这种情况下,ByteString 非常有意义并且最紧凑(与将哈希存储为 string 作为十六进制表示的替代方案相比)。

    请注意,即使您使用ByteString,您仍然可以使用tags 使属性未编入索引,例如:

    type MyEntity struct {
        Something datastore.ByteString `datastore:"something,noindex"`
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2011-05-30
      • 2020-11-27
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多