我应该使用NDB或Search API来存储用户模型吗?

时间:2015-03-10 20:01:40

标签: python google-app-engine full-text-search google-cloud-datastore gae-search

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

```

假设我想对字段name username bio

执行LIKE查询

我已经阅读了此answer about NDB and Search API,我不清楚是否应该只通过Search API存储name username bio并在NDB中保留并手动维护它们的一致性,或者我应该通过Search API存储所有属性,因此检索数据可以更快/更简单。

感谢您提出任何建议:)

2 个答案:

答案 0 :(得分:3)

您应该将任何重要数据存储在数据存储区中。它具有冗余和弹性 - 它是你的" MASTER"。

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

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

答案 1 :(得分:0)

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

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

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