Что такое хорошая реализация витрины данных SQL Server для веб-приложений в ElasticSearch?

Исходя из фона RDBMS и пытаясь понять шаблоны хранения данных ElasticSearch...

В настоящее время в SQL Server у нас есть витрина данных звездообразной схемы, RecordData. Строки организованы по идентификатору пользователя, географическому положению, относящемуся к остальной части доступной для поиска записи, заголовку и описанию (которые являются полями поиска с произвольным текстом).

Я хотел бы перенести это на ElasticSearch и прочитал о создании отдельного индекса для каждого пользователя. Если я правильно понимаю, с этим предложением я бы создал тип RecordData в каждом пользовательском индексе, верно? Какое рекомендуемое соглашение об именах для пользовательских индексов будет простым для анализа Kibana?

У меня есть одна проблема с этой рекомендацией: как бы вы организовали несколько веб-приложений на сервере ES? Вы бы не хотели, чтобы все эти пользовательские индексы были повсюду?

Так ли уж плохо иметь один индекс для каждого приложения и тип для каждой таблицы SQL Server?

Поскольку в SQL Server у нас есть другие таблицы для конфигурации пользователей, основанные на идентификаторах пользователей, я полагаю, что затем я мог бы создать новые типы ES в пользовательских индексах для конфигурации. Это рекомендуемый шаблон? Я бы предпочел не иметь две системы баз данных для этого веб-приложения.

Предложения приветствуются, спасибо.


person ElHaix    schedule 31.07.2015    source источник


Ответы (1)


Я прошел через то же самое, и есть несколько вещей, которые следует учитывать.

Моделирование данных

Вы говорите, что сегодня используете звездную схему. Elasticsearch обычно подходит для денормализованных данных, когда вся информация содержится в каждом документе, в отличие от схемы «звезда». Если вы можете жить с денормализованными, это нормально, но я предполагаю, что, поскольку у вас уже есть звездообразная схема, денормализованные данные не подходят, потому что вы не хотите идти и обновлять миллионы документов каждый раз, например, при изменении имени местоположения (если Я понимаю вариант использования). По крайней мере, в моем случае использования это не было вариантом.

Каковы параметры Elasticsearch для нормализованных данных?

Это заставляет нас задуматься о том, как поместить звездообразную схему, подобную данным, в такую ​​систему, как Elasticsearch. В документации есть несколько вариантов, основные из которых я сосредоточил:

  • Вложенные объекты — более подробная информация доступна по адресу https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-objects.html . Во вложенных объектах вся информация хранится в одном документе, что означает, что одно местоположение и связанные с ним пользователи будут в одном документе. Это может сделать его неоптимальным, поскольку документ будет огромным, и, опять же, изменение имени местоположения потребует обновления всего документа. Так что это лучше, но все же не оптимально.
  • Родительско-дочерние отношения — более подробная информация на https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child.html . В этом случае местоположение и записи о пользователе будут храниться в отдельных индексах, как в реляционной базе данных. Кажется, это правильное моделирование того, что нам нужно. Единственная серьезная проблема с этой опцией заключается в том, что Kibana 4 не предоставляет способов манипулирования/объединения документов на основе отношений родитель/потомок на момент написания этой статьи. Так что, если вашим основным драйвером использования Elasticsearch является Kibana (это было у меня), такой вариант исключает вариант. Если вы хотите извлечь выгоду из скорости эластичного поиска в качестве движка, это, по-видимому, желаемый вариант для вашего варианта использования.

На мой взгляд, как только вы правильно моделируете данные, на все ваши вопросы будет легче ответить.

Что касается организации самих серверов, то способ, которым мы это организуем, заключается в наличии отдельного кластера из 3 узлов elasticsearch за балансировщиком нагрузки (все это размещено в облаке), а затем все ваши веб-приложения подключаются к этому кластеру с помощью API эластичного поиска.

Надеюсь, это поможет.

person isaac.hazan    schedule 31.07.2015
comment
Спасибо Вам за информацию. Re: Родитель/потомок: пользовательские записи хранятся в отдельных индексах... Вы имеете в виду типы (таблицы)? Как бы вы организовали несколько приложений с помощью сервера ES — один индекс для каждого приложения? - person ElHaix; 31.07.2015
comment
Отдельные виды. Один индекс для каждого приложения — это нормально, вопрос снова в том, как моделируются данные и предполагаете ли вы иметь запросы по 2 индексам. - person isaac.hazan; 02.08.2015