如何对从 SQL 服务器到 ElasticSearch 的实时 Web 应用程序进行数据建模?

How to data model a live web app from SQL Server to ElasticSearch?

在我们的 Web 应用程序中,我们在 SQL 服务器中为 geo-based 用户项目内容使用非规范化数据集市。

用户有 1..* 个项目,1..* 个地理区域。内容(在数据集市中)与用户 ID、项目 ID、地理区域的文本值、标题和描述(均为自由文本搜索索引)一起存储:

UserID, ProjectID, Geo, Title, Description, Timestamp

现在想将其转移到 ElasticSearch,什么是好的数据建模方法?

只是为了数据集市,我想只是序列化数据 object(目前使用 .Net 和 EntityFramework)给我 JSON 表示并将其填充到ES。这是一个好方法吗(也需要最少 re-work)?

关于对整个应用程序进行建模,我看到过一些示例,其中 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

所以这看起来整个 Web 应用程序可以从一个 index/type 中 运行。有点可怕,不是吗?

我想在未来使用 Kibana 和其他分析工具,并且阅读了有关数据建模限制的信息,例如不使用 parent/child 类型。

对于这样的东西,一个好的 ElasticSearch 数据模型应该是什么样的?

另一种提问方式是,如何使用 ElasticSearch 为实时 Web 应用程序建模,and/or将用户配置和配置文件存储在单独的 RDBMS 中会更好吗?

谢谢。

如果不了解业务和报告要求,这些问题总是很难回答。但这里有一些我从我公认的 ES 短暂经验中学到的指导方针:

1) 您不必将它们全部放在一个索引中,因此 "user" 和 "project" 的单独索引可能效果最好。由于 ES 默认索引所有字段,用户搜索项目索引会很快。 Kibana 可以搜索多个索引。

2) 当时流行的观点是尽可能保持索引平坦,因此同样适用于为用户配置文件设置单独的索引。

3) 除了序列化和填充之外,创建映射可能是有利的。

关于用户配置和配置文件,我看不出有任何令人信服的理由使用 RDBMS。它们将由没有加入要求的用户 ID 键入,不需要 ACID 一致性和并发模型。 NOSQL 解决方案将为您提供这些用例所需的模式灵活性。