有多种方法可以存储 10k 文本数据,但是否可以接受将取决于您还需要存储什么以及您打算如何使用它。
如果您需要存储任意大的数据(尤其是二进制数据),那么 S3 文件指针可能很有吸引力。SimpleDB 在此方案中添加的价值是能够针对您存储在 SimpleDB 中的文件元数据运行查询。
对于限制为 10k 的文本数据,我建议将其直接存储在 SimpleDB 中。它可以轻松放入单个项目中,但您必须将其分布在多个属性中。基本上有两种方法可以做到这一点,每种方法都有一些缺点。
一种方法更灵活且搜索友好,但需要您触摸数据。您将数据分成大约 1000 字节的块,并将每个块作为属性值存储在多值属性中。对多值属性没有排序,因此您必须在每个块前面加上一个用于排序的数字(例如 01)
将所有文本存储在一个属性中这一事实使得使用谓词中的单个属性名称进行查询很容易。您可以为每个项目添加不同大小的文本,从 1k 到 200+k 不等,并且会得到适当的处理。但是您必须注意,您的前置行号可能会对您的查询产生积极影响(例如,如果您正在搜索的01
每个项目都将匹配该查询)。
在 SimpleDB 中存储文本的第二种方法不需要您在文本块中放置任意排序数据。您可以通过将每个文本块放置在不同的命名属性中来进行排序。例如,您可以使用属性名称:desc01
desc02
... desc10
。然后将每个块放置在适当的属性中。您仍然可以使用这两种方法进行全文搜索,但是使用此方法搜索会更慢,因为您需要指定许多谓词,并且 SimpleDB 最终将通过单独的索引搜索每个属性。
可能很容易将这种类型的工作视为一种 hack,因为对于数据库,我们习惯于在数据库中为我们处理这种类型的低级细节。SimpleDB 专门设计用于将此类事物从数据库中推送到客户端,作为提供可用性作为一流功能的一种手段。
如果您发现关系数据库将您的文本分成 1k 块以作为实现细节存储在磁盘上,那么它看起来不像是 hack。问题是 SimpleDB 客户端的当前状态是,您必须自己实现很多这种类型的数据格式化。这是理想情况下将在智能客户端中为您处理的类型。目前还没有任何免费的智能客户端可用。