假设我在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
我已经阅读了此answer about NDB and Search API,我不清楚是否应该只通过Search API存储name
username
bio
并在NDB中保留并手动维护它们的一致性,或者我应该通过Search API存储所有属性,因此检索数据可以更快/更简单。
感谢您提出任何建议:)
答案 0 :(得分:3)
您应该将任何重要数据存储在数据存储区中。它具有冗余和弹性 - 它是你的" MASTER"。
然后您应该将数据传递给搜索...等待...搜索!这可能包括您的数据存储区记录的ID。
如果您需要的字段多于“搜索”文档中提供的字段,则可以通过批量获取从Memcache或数据存储中检索完整数据对象。
答案 1 :(得分:0)
我从未见过有关全文搜索API的任何一致性承诺(即强大与最终的一致性),它也不能参与交易。
这意味着虽然它对运行类似查询很有用,但您需要依赖其他存储机制作为主要数据源。
因此保存到数据存储区,将有趣的字段索引到搜索索引中。在查询时,搜索搜索索引,然后使用结果中的id / key从数据存储中查找数据(确保满足任何一致性约束)。