【问题标题】:The best document structure to use with Elasticsearch or other Document-oriented databases与 Elasticsearch 或其他面向文档的数据库一起使用的最佳文档结构
【发布时间】:2020-01-19 17:28:32
【问题描述】:

我有一个具有以下结构的聚合的对象:

  • 每个项目有大约 300 个组件。
  • 每个组件大约有 30 个任务。
  • 每个任务可以有大约 20 个寄存器。

每个对象的属性通常是小文本,如标题、名称和浮点数。

保存一个包含大约 10 个项目的 Json 文件,它大约有 60mb。

将这 10 个相同的项目保存在 Elasticseach 索引中,获取所有项目的简单选择大约需要 10 秒来检索响应,据我所知,这种情况需要很长时间。

GET projects/project/_search?pretty=true&q

知道我确实需要对象的所有属性,还有其他方法可以将数据保存在面向文档的解决方案中吗?

我的对象结构是否适合该场景?

在客户端应用程序中,这些文档通常会一次全部检索出来,以便对项目进行一些数据分析。

【问题讨论】:

  • 您希望稍后对文档执行什么操作、查询、聚合或仅根据 id 检索它?我认为,了解您的场景将有助于人们了解您对架构设计的要求。
  • 你好@Rob,谢谢你的回复。我刚刚编辑了这个问题。通常会一次检索所有文档,以便对项目进行一些数据分析。

标签: mongodb elasticsearch nosql nest


【解决方案1】:

一般来说,您应该为基于文档的数据库设计一个扁平化结构。让自己摆脱关系数据库的概念(例如外键、规范化)。

话虽如此,您应该尽可能避免使用连接数据类型。在某些情况下它是有道理的,但在我看来它不应该变得太复杂和嵌套。

通过不引用文档(就像在 RDBMS 中那样),您获得冗余信息。但是在基于文档的数据库的上下文中,这完全没问题!因此,您的列表将是包含存储所有信息的对象(不是文档)的数组。

假设您只有一个具有 n 个子对象的项目(您显示的列表)。在一个完全扁平化的世界中,您将有一个文档被编入索引。

但一如既往:

一切都取决于您的具体用例。我的目的是给你一些提示。我多次遇到DBA将关系模型实现到elasticsearch中,结果非常糟糕。

我建议实现一个基本原型以开始使用扁平结构。

希望能帮到你!

【讨论】:

  • 你完全正确。这就是我在 ES 中存储文档的方式:说我有一个带有 N 个子对象的项目,我有一个文档索引。
  • @Felipe Santana 我的提议你成功了吗?如果您感到满意,我将非常感谢您支持/接受我的回答。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2020-03-15
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多