elasticsearch,nosql,nest,Mongodb,elasticsearch,Nosql,Nest" /> elasticsearch,nosql,nest,Mongodb,elasticsearch,Nosql,Nest" />

Mongodb 与Elasticsearch或其他面向文档的数据库一起使用的最佳文档结构

Mongodb 与Elasticsearch或其他面向文档的数据库一起使用的最佳文档结构,mongodb,elasticsearch,nosql,nest,Mongodb,elasticsearch,Nosql,Nest,我有一个对象,具有以下结构中的一些聚合: 每个项目有大约300个组成部分 每个组件有大约30个任务 每个任务可能有大约20个寄存器 每个对象的属性通常是小文本,如标题、名称和浮点数 保存一个包含大约10个项目的Json文件,可以获得大约60mb的内存 在Elasticseach索引中保存这10个相同的项目,一个简单的选择获取所有项目大约需要10秒来检索响应,据我所知,这是一个很长的时间 GET projects/project/_search?pretty=true&q 知道我真

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

  • 每个项目有大约300个组成部分
  • 每个组件有大约30个任务
  • 每个任务可能有大约20个寄存器
每个对象的属性通常是小文本,如标题、名称和浮点数

保存一个包含大约10个项目的Json文件,可以获得大约60mb的内存

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

GET projects/project/_search?pretty=true&q
知道我真的需要对象的所有属性,有没有其他方法可以在面向文档的解决方案中保存数据

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


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

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

因此,您应该尽可能避免使用join数据类型。在某些情况下,它是有意义的,但在我看来,它不应该变得太复杂和嵌套

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

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

但一如既往:

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

我建议实现一个基本原型来开始扁平化结构


我希望我能帮助你

你完全正确。这就是我在ES中存储文档的方式:假设我有一个包含N个子对象的项目,我有一个文档被索引。@Felipe Santana我的提案成功了吗?如果您感到满意,我将非常感谢您投票/接受我的答案。谢谢。您希望以后对文档做什么,查询它,聚合它,或者根据id检索它?我认为,了解您的场景将有助于人们了解您的模式设计需要什么。您好@Rob,谢谢您的回复。我刚刚编辑了这个问题。通常一次检索所有文档,以便对项目进行一些数据分析。