Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 在Kibana中存储弹性搜索中的扁平嵌套数据以进行分析是否更好?_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Kibana - Fatal编程技术网 elasticsearch 在Kibana中存储弹性搜索中的扁平嵌套数据以进行分析是否更好?,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 在Kibana中存储弹性搜索中的扁平嵌套数据以进行分析是否更好?,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 在Kibana中存储弹性搜索中的扁平嵌套数据以进行分析是否更好?

elasticsearch 在Kibana中存储弹性搜索中的扁平嵌套数据以进行分析是否更好?,elasticsearch,kibana,elasticsearch,Kibana,我们决定在弹性搜索中存储一些数据,以便在Kibana中进行分析。目前,我们依靠Kibana中的动态映射 以这种嵌套方式存储数据是否更好: project: { id: 1, path: [1], device: { id: 2, path: [1,2], accessory: { id: 3, path: [1,2,3] } } } 或者发送更规范化的数据,如下所示: project: { id: 1, path:

我们决定在弹性搜索中存储一些数据,以便在Kibana中进行分析。目前,我们依靠Kibana中的动态映射

以这种嵌套方式存储数据是否更好:

project: {
  id: 1,
  path: [1],
  device: {
    id: 2,
    path: [1,2],
    accessory: {
      id: 3,
      path: [1,2,3]
    }
  }
}
或者发送更规范化的数据,如下所示:

project: {
  id: 1,
  path: [1]
}

device: {
  id: 2,
  path: [1,2]
}

accessory: {
  id: 3,
  path: [1,2,3]
}
{
    id: project1,
    ...,
    devices: [
      {
          id: dev1,
          name: device1,
          ...,
          accessories:[
              {
                  name: accessory1.1,
                  id: acc1.1,
                  ...
              },
              {
                  name: accessory1.2,
                  id: acc1.2,
                  ...
              }
          ]  
      },
      {
          id: dev2,
          name: device2,
          ...,
          accessories:[
              {
                  name: accessory2.1
                  id: acc2.1,
                  ...
              }
          ]  
      }
   ]
}

或者有第三种更好的方法来存储上述数据吗?

根据示例的结构,嵌套应该更有帮助

假设您的项目有多个设备,每个设备都有多个附件。您的结构可能如下所示:

project: {
  id: 1,
  path: [1]
}

device: {
  id: 2,
  path: [1,2]
}

accessory: {
  id: 3,
  path: [1,2,3]
}
{
    id: project1,
    ...,
    devices: [
      {
          id: dev1,
          name: device1,
          ...,
          accessories:[
              {
                  name: accessory1.1,
                  id: acc1.1,
                  ...
              },
              {
                  name: accessory1.2,
                  id: acc1.2,
                  ...
              }
          ]  
      },
      {
          id: dev2,
          name: device2,
          ...,
          accessories:[
              {
                  name: accessory2.1
                  id: acc2.1,
                  ...
              }
          ]  
      }
   ]
}
使用这种结构的优点是:

  • 您的映射和设置将只关注项目的结构,而不是为每个项目、设备和附件定义多个设置和映射

  • 另外,您将避免“规范化”您的文档。规范化意味着项目、设备和附件将具有相同的字段,并期望具有相同类型的值

  • 如果需要,您可以在项目中添加或删除设备或附件,而不会影响多个文档

  • 您可以在Kibana中创建仪表板,根据特定字段分析数据。仪表板接受聚合,您可以每5秒刷新一次数据

我可以发现一些缺点:

  • 如果您是ES新手,查询一开始可能会有点混乱

  • 如果删除项目,整个信息(包括设备和附件)也将被删除。小心点

  • 聚合可能会对您的性能产生一些影响。但这更多地与基础设施(硬件、集群设计等)相关

最后,如果您想单独存储项目、设备和附件的信息,可以为每个项目、设备和附件使用索引,但它们之间的关系可能不那么容易保持,查询将变得非常复杂

希望这有帮助!:D