我应该使用 NDB 还是 Search API 来存储用户模型?

Should I use NDB or Search API for storing User model?

假设我在 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

我读过这个 answer about NDB and Search API 但我不清楚我是否应该只通过搜索 API 存储 name username bio 和留在 NDB 中并手动维护它们的一致性,或者我应该通过搜索 API 存储所有属性,以便检索数据可以是 faster/simpler.

感谢您提出任何建议 :)

您应该将所有重要数据存储在 Datastore 中。它具有冗余和弹性 - 它是您的 "MASTER".

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

如果您需要的字段比搜索文档中的字段多,则可以通过批处理从 Memcache 或 Datastore 检索完整的数据对象。

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

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

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