Я хотел бы понять влияние производительности индексирования документов нескольких типов на один индекс, где есть дисбаланс в количестве элементов каждого типа (один тип имеет миллионы, где другой тип имеет только тысячи документов). Я обнаружил проблемы с некоторыми из моих индексов и исключаю, будут ли индексы индексироваться отдельно в пределах одного индекса (или нет). Можно ли предположить, что типы индексируются отдельно по линиям реляционной базы данных, где каждая таблица фактически разделена?Типы и производительность индексирования ElasticSearch
Если ответ на вышеизложенное отсутствует и что типы эффективно объединены вместе, тогда я выложу остальную часть того, что я делаю, чтобы попытаться получить более подробный ввод.
В этом примере используется твиты для пользователей Twitter (для ясности назовите его владельцем). У меня многопользовательская среда с одним индексом на одного владельца твиттера. Тем не менее, сосредоточив внимание на одном владельце:
- Я захватить твиты от каждой шкале (упоминает, прямые сообщения, мои твиты и полный «домашний» график) в единый индекс, с каждым типом график, имеющий другое сопоставление в ElasticSearch
- Каждый твит относится к родительскому типу, пользователю, который создал твит (который может быть или не быть владельцем), с родительским сопоставлением. Существует только один тип пользователя для всех типов временной шкалы
- Я ищу и фасет только на одного владельца в одном запросе, поэтому мне не нужно заниматься поиском по нескольким индексам
- Домашняя хронология может захватывать миллионы твитов, где собственные твиты владельца могут приводить к сотням или тысячам.
- Документы пользователя регулярно обновляются с информацией за пределами временных графиков Twitter, поэтому я хотел бы избежать (если возможно) ситуации, когда я должен хранить несколько копий одного и того же объекта пользователя в синхронизации по нескольким индексам
Я заметил много более низкий запрос ответов на индексы с миллионами документов, даже если исключить тип «домашней временной шкалы» с миллионами проиндексированных документов, оставив только типы с несколькими тысячами записей. Я не хочу разбивать типы на отдельные индексы (если только не нужно) из-за отношений между родителями и дочерними элементами между твитом и пользователем.
Есть ли способ, который я могу понять, если проблема связана с общим количеством документов в определенном индексе, что-то связано с работой фильтрованных запросов has_child, другой плохой дизайн запросов или граней или что-то еще еще?
Любой вход будет оценен.
EDIT
Для уточнения о том, что твиты хранятся на временной шкале. Это означает, что существует тип ElasticSearch, определенный для home_timeline, my_tweets_timeline, mentions_timeline, direct_messages_timeline и т. Д., Которые соответствуют тому, что вы видите в стандартном пользовательском интерфейсе twitter.com. Таким образом, существует естественное разделение между наборами твитов, хотя и с некоторым перекрытием.
Я вернулся, чтобы проверить запросы has_child, и это определенная красно-селедка на данный момент. Основные запросы по более крупным индексам намного медленнее, даже если вы запрашиваете тип с несколькими тысячами строк (my_tweets_timeline).
Мой ответ кажется неполным, но так же и ваш вопрос: пожалуйста, предоставьте запрос 'has_child', который вы используете, а также примеры разных документов со своими отношениями. В частности, я не был уверен, что вы подразумеваете под «исключением типа« домашней временной шкалы »» - я только понял смысл твитов и типов пользователей, так что это смутило меня. –
Paul, я немного изменил вопрос, чтобы уточнить сроки. Кроме того, возвращаясь к запросам, has_child больше не относится к производительности, чем к обычным запросам. – Phil
Хм, хорошо. Похоже, что это общая проблема масштабируемости. Надеюсь, кто-то еще может перезвонить. +1 –