elasticsearch Elasticsearch中存储嵌套数据的优化方法,elasticsearch,indexing,elasticsearch,Indexing" /> elasticsearch Elasticsearch中存储嵌套数据的优化方法,elasticsearch,indexing,elasticsearch,Indexing" />

elasticsearch Elasticsearch中存储嵌套数据的优化方法

elasticsearch Elasticsearch中存储嵌套数据的优化方法,elasticsearch,indexing,elasticsearch,Indexing,我想知道,在Elastic中存储数据对象的最佳方式是什么,它看起来像: physical_host_name: physicalOne physical_host_cpu_model: x86_64 physical_host_cpu_num: 72 physical_host_mem_size: 792116312 KiB physical_host_guests_list: { guestOne : { guest_max_mem: 16384000 K

我想知道,在Elastic中存储数据对象的最佳方式是什么,它看起来像:

physical_host_name: physicalOne
physical_host_cpu_model: x86_64
physical_host_cpu_num: 72
physical_host_mem_size: 792116312 KiB
physical_host_guests_list: 
{

    guestOne : 
    {
        guest_max_mem: 16384000 KiB
        guest_os_type: hvm
        guest_state: running
    }

    guestTwo : 
    {
        guest_max_mem: 11234000 KiB
        guest_os_type: hvm
        guest_state: paused
    }
}
我希望能够通过
物理主机名
进行查询,并获取该主机的所有相关数据(包括物理主机名来宾名单),还能够通过
来宾名
(例如“guestOne”)进行查询,并仅获取该来宾的相关数据


这些都应该放在一个索引中吗?每个文档应该是什么样子?

您的设计是一种有效的方法。文档本身与您的示例非常相似,但是JSON。让我们把这个版本命名为“A”。如果主机或来宾发生任何更改,您需要查找并更新文档。Cosider使用FQDN作为文档id。这将简化CRUD。但是有一个弹性生成的id是可以的(如果您的数据集足够大,可以容纳多个碎片,因为id会影响文档在多个碎片上的分布,这可能是一个更好的方法)

我还看到一个版本“B”,其中每个来宾都是一个单独的文档,并且还包含对主机(家长)的引用:

主机将有一个自己的文档,如下所示:

{type: host, name: physicalOne, parent: null, cpu: {model: x86_64, num: 72} , mem: {total: 792116312 KiB}, os: {name: linux, version: 3}, state: running} 
如果您需要订单,对于来宾或主机,也可以添加订单字段,但我会尝试使用主机名等自然顺序。这将大大简化添加/删除

这样,您只需要更新发生更改的文档,添加和删除新来宾非常简单。还请注意嵌套属性(cpu、os、ram)。这将清理您的DIC,并可能更好地设计使用/管理这些数据的应用程序中的类。此设计还允许您跨所有来宾或主机进行查询。这种设计的主要优点是在主机和来宾文档中使用相同的字段集,这将尽可能降低索引的占用空间(ram/存储)


这种设计(B)是我的首选,但只是众多可想象的设计之一。最后,设计应该在许多方面支持你,但要针对阅读、写作、分析等的速度/便利性进行优化

您的设计是一种有效的方法。文档本身与您的示例非常相似,但是JSON。让我们把这个版本命名为“A”。如果主机或来宾发生任何更改,您需要查找并更新文档。Cosider使用FQDN作为文档id。这将简化CRUD。但是有一个弹性生成的id是可以的(如果您的数据集足够大,可以容纳多个碎片,因为id会影响文档在多个碎片上的分布,这可能是一个更好的方法)

我还看到一个版本“B”,其中每个来宾都是一个单独的文档,并且还包含对主机(家长)的引用:

主机将有一个自己的文档,如下所示:

{type: host, name: physicalOne, parent: null, cpu: {model: x86_64, num: 72} , mem: {total: 792116312 KiB}, os: {name: linux, version: 3}, state: running} 
如果您需要订单,对于来宾或主机,也可以添加订单字段,但我会尝试使用主机名等自然顺序。这将大大简化添加/删除

这样,您只需要更新发生更改的文档,添加和删除新来宾非常简单。还请注意嵌套属性(cpu、os、ram)。这将清理您的DIC,并可能更好地设计使用/管理这些数据的应用程序中的类。此设计还允许您跨所有来宾或主机进行查询。这种设计的主要优点是在主机和来宾文档中使用相同的字段集,这将尽可能降低索引的占用空间(ram/存储)

这种设计(B)是我的首选,但只是众多可想象的设计之一。最后,设计应该在许多方面支持你,但要针对阅读、写作、分析等的速度/便利性进行优化