我们将弹性搜索用于以下用例.
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个巨大的指数和许多类型
问候
我建议采用不同的方法: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
我认为这两种策略各有利弊:
多个索引:
优点: - 租户数据与其他数据隔离,任何查询都不会返回来自多个数据的结果。- 如果文档总数非常大,不同的较小索引可以提供更好的性能
缺点:更难管理。如果每个索引的文档很少,您可能会浪费大量资源。
编辑:根据性能和弃用功能的评论,避免同一索引中存在多种类型
| 归档时间: |
|
| 查看次数: |
1743 次 |
| 最近记录: |