ElasticSearch:更多索引与更多类型

SSG*_*SSG 9 elasticsearch

我们将弹性搜索用于以下用例.
Elasticsearch版本:5.1.1
注意:我们使用的是AWS托管的ElasticSearch

我们有一个多租户系统,在每个租户中存储多个事物的数据,租户数量将逐日增加.

exa:每个租户都有以下信息.

1] tickets
2] sw_inventory
3] hw_inventory
Run Code Online (Sandbox Code Playgroud)

目前的索引策略如下:

indexname:
tenant_id(GUID)exa:tenant_xx1234xx-5b6x-4982-889a-667a758499c8

类型:

1] tickets
2] sw_inventory
3] hw_inventory
Run Code Online (Sandbox Code Playgroud)

我们面临的问题:

1]公共字段映射的冲突exa:(id,name,userId)类型(ticket,sw_inventory,hw_inventory)
2]随着租户数量的增加,索引的数量也可以达到1000或2000.

如果我们改变索引策略是不是一个好主意?

exa:索引名称:

1] tickets
2] sw_inventory
3] hw_inventory
Run Code Online (Sandbox Code Playgroud)

类型:

tenant_tenant_id1
tenant_tenant_id2
tenant_tenant_id3
tenant_tenant_id4
Run Code Online (Sandbox Code Playgroud)

所以只有3个巨大的指数,N个类型作为租户.

那么在这种情况下的问题是哪种解决方案更好?

1]许多小指数和3种类型
OR
2] 3个巨大的指数和许多类型

问候

And*_*fan 6

我建议采用不同的方法:https : //www.elastic.co/guide/en/elasticsearch/guide/master/faking-it.html

这意味着自定义路由,其中​​每个文档都有一个tenant_id或类似的(每个租户独有的东西),并将其用于路由和为每个租户定义别名。然后,当仅查询特定租户的文档时,您可以使用别名。

您将以此方式使用一种索引和一种类型。根据索引的大小,您可以考虑现有的索引大小和节点数量,并尝试以这样的方式提出多个分片​​,使它们在所有数据保存节点上或多或少地均匀分割,并且,也遵循您的测试性能可以接受。如果将来索引变得太大并且分片变得太大而无法保持相同的性能,请考虑创建一个具有更多主分片的新索引,并重新索引该新分片中的所有内容。这不是闻所未闻、未使用或不推荐的方法。

就处理能力而言,1000-2000 个别名不算什么。如果您有接近 10 个或 10 个以上的节点,我还建议使用具有 4-6GB 堆大小和至少 4 个 CPU 内核的专用主节点。


Fer*_*dez -1

我认为这两种策略各有利弊:

多个索引:

优点: - 租户数据与其他数据隔离,任何查询都不会返回来自多个数据的结果。- 如果文档总数非常大,不同的较小索引可以提供更好的性能

缺点:更难管理。如果每个索引的文档很少,您可能会浪费大量资源。

编辑:根据性能和弃用功能的评论,避免同一索引中存在多种类型