平面文档与嵌套文档的性能缺点是什么?

时间:2016-02-18 13:42:12

标签: elasticsearch

我有自然适合

等文档的数据
{
  "name": "Multi G. Enre",
  "books": [
    {
      "name": "Guns and lasers",
      "genre": "scifi",
      "publisher": "orbit"
    },
    {
      "name": "Dead in the night",
      "genre": "thriller",
      "publisher": "penguin"
    }
  ]
}

(示例来自嵌套和has_child文档的a good review

为了在Kibana和其他软件(混合遗留和懒惰)中分析它们,它们被夷为平地:

{
  "name": "Multi G. Enre",
  "book_name": "Guns and lasers",
  "book_genre": "scifi",
  "book_publisher": "orbit"
}
{
  "name": "Multi G. Enre",
  "book_name": "Dead in the night",
  "book_genre": "thriller",
  "book_publisher": "penguin"
}

除了索引大小的明显增长之外,查询此类扁平记录(查询类型为"writer with scifi books from penguin")与嵌套式记录(而不是父级/子级记录)通常会产生性能影响吗?

1 个答案:

答案 0 :(得分:3)

查询平面指数将会更好,更好! noSQL数据库背后的整个想法是对数据进行非规范化。

在您的第一个示例中,请注意每次添加图书时都需要更新该记录。这是ES / noSQL中的一个大禁忌。 ES记录应该是不可变的。幕后更新实际上是删除+插入,非常昂贵。