我什么时候不应该使用App Engine的全文搜索API?

Nic*_*ina 20 google-app-engine full-text-search

到目前为止,我已经使用App Engine的全文搜索来帮助搜索我的数据存储区中的现有实体.这涉及为Document每个实体创建至少一个,并以某种方式将两者连接在一起.每次我更改实体,我都必须更改相应的Documents.

我的问题是,为什么不只是存储我的所有数据Documents而忘记数据存储实体?与数据存储区不同,搜索API支持更丰富的查询语言,可以处理多个不等式过滤器和布尔运算符.

我是否遗漏了一些关于搜索API设计的内容,这些内容会妨碍使用它来完全替换数据存储区?

Pix*_*ant 7

根据Java文档

但是,索引搜索可以找到不超过10,000个匹配的文档.App Engine数据存储可能更适合需要检索非常大的结果集的应用程序.

虽然我不认为这是一个常见的用例.

更现实的是,通过密钥获取实体将比数据存储更便宜(可能更快).使用搜索API,您可以使用Index.get()按ID查找文档,也可以通过将ID存储在字段中并在该字段上搜索来复制ID.

这是一个成本细分:

- Index.get():     $0.10 /  10,000 or 0.00001 per get
- Index.search():  $0.13 /  10,000 or 0.000013 per get
- Datastore get(): $0.06 / 100,000 or 0.0000006 per get
Run Code Online (Sandbox Code Playgroud)

如您所见,数据存储区获取比搜索API选项便宜得多(比Index.get()便宜16倍).

如果您的数据结构采用了大量直接获取和少量复杂搜索的方式,那么数据存储区在成本方面将是明显的赢家.

注意:我没有包含使用Index.search()方法存储重复数据的额外成本,因为这取决于您存储的实体数量.


alo*_*loo 5

只需将数据放入两者中 - 存储空间很便宜,并且根据您的应用程序的写入量而定,更新也可能很便宜.为了便于查询并通过密钥获取单个实体 - 使用内存缓存和数据存储.对于复杂查询,请使用搜索API.一旦宣布定价,你就必须做出权衡.