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

Предположим, у меня есть базовая модель пользователя в 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 и API поиска, и я не понимаю, следует ли мне хранить только name username bio через API поиска и отдыхать в NDB и вручную поддерживать их согласованность, или я должен хранить все свойства через API поиска, поэтому извлечение данных можно быстрее/проще.

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


comment
Как работает Stack Overflow, это не совсем то место для такого вопроса. Я думаю, что groups.google.com/forum/#!forum/google-appengine может быть лучше, учитывая, что формат форума ближе к тому, что вам нужно ^^   -  person Patrice    schedule 10.03.2015
comment
форум исчез, он переехал сюда, видимо, на ТАК (хотя не уверен)   -  person EsseTi    schedule 13.03.2015


Ответы (2)


Вы должны хранить любые важные данные в хранилище данных. У него есть избыточность и отказоустойчивость — это ваш «МАСТЕР».

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

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

person Tom    schedule 10.03.2015

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

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

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

person Nick    schedule 10.03.2015