在数据存储区中存储长文本

时间:2017-04-03 11:22:30

标签: go google-cloud-datastore google-cloud-platform

数据存储区是否适合存储非常长的文本,例如个人资料说明和文章?

如果没有,Google Cloud替代方案是什么?

如果是,那么存储它以保持格式化(如换行符和降价支持的关键字)的理想方式是什么?只需存储为字符串或转换为字节?我应该担心脏用户输入吗?

我需要一个Go项目(我不认为语言是相关的,但也许Go有一些有用的功能)

1 个答案:

答案 0 :(得分:4)

是的,如果你确定有某些限制,它是合适的。

这些限制是:

  • 整体实体大小(属性+索引)不得超过1 MB(对于配置文件和大多数文章,这应该没问题)
  • 长度超过某个限制(当前为1500字节)的文本无法编入索引,因此实体可能会存储更长的字符串,但您无法在其中搜索/将其包含在查询过滤器中;请勿忘记"noindex"
  • tag这些字段

至于类型,您可以简单地使用string,例如:

type Post struct {
    UserID  int64  `datastore:"uid"`
    Content string `datastore:"content,noindex"`
}

string类型保留所有格式,包括换行符,HTML,标记和任何格式。

"脏用户输入?" 这是呈现/呈现数据的问题。数据存储区不会尝试解释它或尝试根据其内容执行任何操作,也不会对其进行转换。因此,从数据存储的角度来看,你没有什么可担心的(你不能通过附加文本来创建文本GQL,对吧?!)。

另请注意,如果您要在实体中存储大型文本,则只要您加载/查询此类实体,就会获取这些大型文本,并且您还必须在修改和(重新)保存此类实体时将其发送一个实体。

提示#1:如果您在某些查询中不需要全文,请使用projection queries以避免"大"数据移动(最终加快查询速度)。

提示#2: To" easy"由于无法索引大型文本的负担,您可以添加重复属性,如简短摘要或大文本标题,因为可以索引短于1500字节的string值。

提示#3:如果您想要超过1 MB的实体大小限制,或者您只是希望通常减少数据存储区大小的使用,则可以选择存储压缩的大型文本内部实体。由于它们很长,无论如何都无法搜索/过滤它们,但它们压缩得非常好(通常低于原始的40%)。因此,如果您有许多长文本,只需存储压缩的所有文本,就可以将数据存储区大小缩小到1/3。当然这会增加实体保存/加载时间(因为你必须压缩/解压缩文本),但通常它仍然是值得的。