数据存储区是否适合存储非常长的文本,例如个人资料说明和文章?
如果没有,Google Cloud替代方案是什么?
如果是,那么存储它以保持格式化(如换行符和降价支持的关键字)的理想方式是什么?只需存储为字符串或转换为字节?我应该担心脏用户输入吗?
我需要一个Go项目(我不认为语言是相关的,但也许Go有一些有用的功能)
答案 0 :(得分:4)
是的,如果你确定有某些限制,它是合适的。
这些限制是:
"noindex"
至于类型,您可以简单地使用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。当然这会增加实体保存/加载时间(因为你必须压缩/解压缩文本),但通常它仍然是值得的。