В нашем веб-приложении мы используем денормализованную витрину данных в SQL Server для контента пользовательского проекта с географической привязкой.
У пользователей есть 1..*проекты, 1..*геозоны. Содержимое хранится (в киоске данных) с идентификатором пользователя, идентификатором проекта, текстовыми значениями для географических областей, заголовком и описанием (оба проиндексированы с помощью свободного текстового поиска):
UserID, ProjectID, Geo, Title, Description, Timestamp
Теперь, когда мы хотим перенести это на ElasticSearch, какой подход к моделированию данных будет хорошим?
Просто для витрины данных я думал просто сериализовать объект данных (в настоящее время использую .Net и EntityFramework), чтобы дать мне представление JSON и вставить его в ES. Является ли это хорошим подходом (также требует наименьшей повторной работы)?
Что касается моделирования всего приложения, я видел примеры, когда тип ES был бы организован, скажем, пользователями, поэтому модель может выглядеть примерно так:
User
User ID, Name, etc...
ProfileSettings
Setting1, Setting2, etc...
Geographies
GeoID, GeoName
Projects
ProjectID, ProjectName
ProjectContent
Key (UserID:ProjectID:ProjectContentID), GeoName, Title, Description, Timestamp
Таким образом, похоже, что все веб-приложение может работать с одним индексом/типом. Немного страшно, нет?
Я хотел бы использовать Kibana и другие инструменты анализа в будущем и читал об ограничениях моделирования данных, таких как отказ от использования родительских/дочерних типов.
Как будет выглядеть хорошая модель данных ElasticSearch для чего-то подобного?
Другой способ спросить: как смоделировать работающее веб-приложение с помощью ElasticSearch и/или лучше хранить пользовательские конфигурации и профили в отдельной СУБД?
Спасибо.