当前位置: 首页 > 面试题库 >

嵌套文档与父/子文档的缩放比例

翟善
2023-03-14
问题内容

我正在为我们运行概念验证,以便对ES中更多“标准化”的数据运行嵌套查询。

例如带有嵌套

客户->-名称
-电子邮件-事件->-创建-类型

现在,我可以将给定客户的事件列表移至另一位客户。例如,客户A有50个事件客户B有5000个事件

我现在想将所有事件从客户A移动到客户B

拥有数百万客户的规模,并且在UI中针对图形进行查询,Parent / Child更适合还是应该能够嵌套处理?

在我的情况下,优缺点是什么?


问题答案:

很难为您提供诸如“嵌套足够好”之类的粗略性能指标,但是我可以为您提供一些有关嵌套vs父/子的详细信息。我仍然建议进行一些基准测试以验证性能是否可以接受。

巢状

  • 嵌套文档彼此存储在相同的Lucene块中,这有助于提高读取/查询性能。读取嵌套文档比同等的父/子更快。
  • 更新嵌套文档(父级或嵌套子级)中的单个字段会强制ES重新为 整个 嵌套文档编制索引。对于大型嵌套文档而言,这可能会非常昂贵
  • 更改“父”意味着ES将:删除旧文档,使用更少的嵌套数据重新索引旧文档,删除新文档,使用新的嵌套数据重新索引新文档。

父母/子女

  • 子项与父项分开存储,但被路由到同一分片。因此,父级/子级在读取/查询时的性能略低于嵌套的性能
  • 父/子映射有一些额外的内存开销,因为ES在内存中维护“连接”列表
  • 更新子文档不会影响父文档或其他任何子文档,这可能会节省大型文档的大量索引
  • 更改父级意味着您将删除旧的子级文档,然后在新的父级下索引相同的文档。

嵌套可以很好地工作,但是如果您认为有可能进行大量“数据改组”,则“父/子”可能更合适。嵌套最适合嵌套数据不经常更新但经常读取的实例。父母/孩子最好安排数据更频繁地移动。



 类似资料:
  • 我很好奇在我的主模式中使用子文档和更深层文档的利弊: 或者 我目前到处都在使用subdocs,但我主要想知道我可能遇到的性能或查询问题。

  • 问题内容: 我对在我的主模式中使用子文档和更深层的优缺点感到好奇: 要么 我目前在各处使用子文档,但主要是想知道性能或查询我可能遇到的问题。 问题答案: 根据文档,它是完全一样的。但是,使用Schema也会添加一个字段(只要您没有禁用该字段),并且大概会使用更多资源来跟踪子文档。 备用声明语法 v3中的新增功能 如果不需要访问子文档架构实例,则还可以通过简单地传递对象文字来声明子文档[…]

  • 将mongodb与pymongo一起使用,我有以下文档: 我想更新示例子文档(这是一个数组元素,因为可能有多个示例)。我有以下代码,但它不工作... 谁能告诉我这个有什么问题吗?

  • 问题内容: 我正在编写资产管理应用程序。它允许用户通过向资产添加html控件(例如文本字段,选择菜单等)来存储任意资产属性。然后,该属性的JSON表示成为存储在beddb中的资产JSON文档的一部分。资产在ouchdb中具有以下结构: 我不确定将属性放入数组是否是允许基于属性值搜索资产的最佳方法。将属性直接附加到资产作为属性会更好吗?我正在用Elasticsearch做实验。如果我尝试按原样存储文

  • 我有一个深度嵌套的文档结构,如下所示: 我正在尝试更新集合以插入新配置,如下所示: 我正在mongo(Python)中尝试类似的内容: 但是,我得到了“如果没有包含数组的相应查询字段,则无法应用位置运算符”错误。在mongo这样做的正确方式是什么?这是mongo v2。4.1.

  • 问题内容: 我如何在mongodb文档中嵌套文档的地方搜索文档。例如,我有一组私人消息。每条私人消息都有两个嵌套文档- 一个代表发送用户,另一个代表接收使用。两个嵌套文档的格式均为- userID:34343,名称:Joe Bloggs 我希望能够搜索用户发送的所有邮件(例如,搜索发件人用户的嵌套文档)。 我正在使用Java驱动程序。我是否需要创建一个代表嵌套文档的DBObject? 谢谢 问题答