Должен ли я использовать NDB или API поиска для хранения пользовательской модели?

Предположим, у меня есть базовая модель User в 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 запрос на полях nameusernamebio

Я прочитал этот ответ о NDB и API поиска, и мне не ясно, стоит ли мне хранить только nameusernamebio через API поиска и отдых в NDB и вручную поддерживать их согласованность, или я должен сохранить все свойства через API поиска, чтобы поиск данных мог быть быстрее / проще.

Спасибо за любые предложения:)

2 ответа

Решение

Вы должны хранить любые важные данные в хранилище данных. Он имеет избыточность и отказоустойчивость - это ваш "МАСТЕР".

Затем вы должны передать данные для поиска... ждать его... поиск! Это может включать идентификатор вашей записи в хранилище данных.

Затем вы можете получить свой полный объект данных из Memcache или Datastore с помощью пакетной загрузки, если вам нужно больше полей, чем представлено в документе поиска.

Я никогда не видел каких-либо обязательств по согласованию в отношении API полнотекстового поиска (т. Е. Сильной или возможной согласованности), он также не может участвовать в транзакциях.

Это означает, что, хотя он полезен для выполнения аналогичного запроса, вы должны полагаться на какой-то другой механизм хранения в качестве основного источника данных.

Так что сохраните в хранилище данных, индексируйте интересные поля в поисковый индекс. При запросе выполняйте поиск в индексе поиска, а затем используйте идентификатор / ключ из результата для поиска данных из хранилища данных (убедитесь, что соблюдаются все ограничения согласованности).

Другие вопросы по тегам