0

假设我在 ndb 中有基本的用户模型,具有以下属性:

```

name = ndb.StringProperty(default='')
username = ndb.StringProperty(required=True)
email = ndb.StringProperty(default='')
active = ndb.BooleanProperty(default=True)
admin = ndb.BooleanProperty(default=False)
permissions = ndb.StringProperty(repeated=True)
verified = ndb.BooleanProperty(default=False)
token = ndb.StringProperty(default='')
password_hash = ndb.StringProperty(default='')
bio = ndb.StringProperty(default='')
location = ndb.StringProperty(default='')
facebook = ndb.StringProperty(default='')
twitter = ndb.StringProperty(default='')
gplus = ndb.StringProperty(default='')
github = ndb.StringProperty(default='')

```

假设我想对字段执行 LIKE 查询name username bio

我已经阅读了有关 NDB 和 Search API 的答案,但我不清楚我是否应该只name username bio通过 Search API 存储并在 NDB 中休息并手动保持它们的一致性,还是应该通过 Search API 存储所有属性,以便检索数据可以更快/更简单。

感谢您的任何建议:)

4

2 回答 2

3

您应该将所有重要数据存储在 Datastore 中。它具有冗余和弹性——它是你的“主人”。

然后,您应该将数据传递给搜索...等待它...搜索!这可能包括您的数据存储记录的 ID。

然后,如果您需要的字段多于搜索文档中的字段,则可以通过批量获取从 Memcache 或 Datastore 检索完整的数据对象。

于 2015-03-10T20:28:56.427 回答
0

我从未见过关于全文搜索 API 的任何一致性承诺(即强一致性与最终一致性),它也不能参与事务。

这意味着虽然它对运行类似查询很有用,但您需要依赖其他一些存储机制作为主要数据源。

所以保存到数据存储中,将感兴趣的字段索引到搜索索引中。查询时,在搜索索引中搜索,然后使用结果中的 id/key 从数据存储中查找数据(确保满足任何一致性约束)。

于 2015-03-10T23:53:48.420 回答