AppEngine数据存储区:字节切片与datastore.ByteString

时间:2016-08-15 12:47:04

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

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

我被迫使用[]byte,因为我不需要索引,它会为我节省额外的写入费用,但是我使用{{1}更好因为它意味着短期价值?这样做有什么好处吗?

1 个答案:

答案 0 :(得分:3)

类型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"`
}