Подтвердить что ты не робот

Когда я НЕ должен использовать API полнотекстового поиска App Engine?

До сих пор я использовал полнотекстовый поиск App Engine для поиска в существующих хранилищах в моем хранилище данных. Это включает в себя создание по меньшей мере одного Document для каждой сущности и как-то связать их. И каждый раз, когда я меняю объект, я должен изменить соответствующий Documents.

Мой вопрос: почему бы не просто сохранить все мои данные в Documents и забыть о объектах Datastore? API поиска поддерживает гораздо более богатый язык запросов, который может обрабатывать множество фильтров неравенства и логических операторов, в отличие от хранилища данных.

Я пропустил что-то о дизайне API поиска, который бы исключал его использование для полного замены хранилища данных?

4b9b3361

Ответ 1

В соответствии с Java docs

Однако поиск по индексу может найти не более 10000 совпадений документы. Хранилище данных App Engine может быть более подходящим для приложения, которые должны извлекать очень большие результирующие наборы.

Хотя я не вижу это как обычный вариант использования.

Более реалистично, получение сущностей по ключу будет намного дешевле с Datastore (предположительно, быстрее). С помощью API поиска вы можете использовать Index.get() для поиска документа по идентификатору или дублировать идентификатор, сохраняя его в поле и искать в этом поле.

Здесь разбивка затрат:

- Index.get():     $0.10 /  10,000 or 0.00001 per get
- Index.search():  $0.13 /  10,000 or 0.000013 per get
- Datastore get(): $0.06 / 100,000 or 0.0000006 per get

Как вы можете видеть, Datastore get намного дешевле, чем параметры API поиска (в 16 раз дешевле, чем Index.get()).

Если ваши данные структурированы таким образом, чтобы использовать множество прямых запросов и несколько сложных поисковых запросов, Datastore станет явным победителем с точки зрения стоимости.

Примечание. Я не включил дополнительную стоимость для хранения повторяющихся данных с помощью метода Index.search(), поскольку это зависит от того, сколько объектов вы храните.

Ответ 2

Просто поместите данные в обоих - хранилище дешево и зависит от того, сколько пишет ваше приложение, это может быть дешево, чтобы делать обновления. Для простых запросов и получения отдельных объектов по ключу - используйте memcache и хранилище данных. Для сложных запросов используйте поиск api. Вы должны будете сделать компромисс после объявления цены.

Ответ 3

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

Ответ 4

Не могли бы вы:

  • потерять любые преимущества memcache

  • сталкиваются с более низкими квотами. "мы ожидаем, что наша свободная квота будет охватывать около 1000 поисков в день, как только эта функция закончится экспериментальной". Я не вижу количества прочитанных вами чтений, но я считаю, что это выше для хранилища данных. Я посмотрел на https://developers.google.com/appengine/docs/quotas#Resources

    Кроме того, для обновления объекта мы по-разному взимаем плату за обновление или новый. Похоже, что индексы не обновляются, а скорее добавляются в качестве нового документа (это то, что я делаю в любом случае). Не имея деталей индекса цен, трудно точно знать, но, возможно, обновление одного или двух индексированных значений на сущности было бы дешевле, чем создание нового целого индекса. Это будет зависеть от ваших данных, которые я предполагаю.

    Наконец, общий размер индекса для индексов теперь составляет 250 М, а данные ограничены 1 ГБ. Затем хранилище данных больше и еще ни слова о дополнительных ценах на индекс для индекса.

  • нужно разработать план резервного копирования. В любом случае я не знаю, как создать резервную копию или восстановить индекс, если он поврежден. Наличие данных в сущностях означает, что индекс поиска может быть воссоздан. Теперь вы можете сделать резервную копию с консоли администратора для хранилища данных.

Ответ 5

В дополнение к затратам на производительность для запросов больших наборов данных, хранилище данных также имеет преимущество, позволяющее получать строго согласованные данные. Взгляните на эту ссылку для получения дополнительной информации о сильных согласованных и возможных согласованных данных.

Следует предположить, что документы, хранящиеся в индексах API поиска, в конечном итоге являются непротиворечивыми.