在elasticsearch.org网站上,我找不到任何解释如何组织将插入Elasticsearch 的索引名称和索引类型的文档.
例如,很明显,要将数据放入索引,您可以使用REST api,例如:
curl -XPUT localhost:9200/<INDEX>/<TYPE>/<id> -d '{ mydata : "someData" }'
Run Code Online (Sandbox Code Playgroud)
不清楚是什么后果:
1)INDEX:这是根据视频概述的数据库,但如果这些太高,性能的含义是什么
2)TYPE:根据视频概述,这就像一张桌子.如果它对所有数据使用固定值怎么办?
在我的实现中,我想让它运行多租户 场景,使用INDEX作为TENANT_ID,TYPE作为单个桶名称("STUFF").租户数量可能非常大(数千).这是一个好方法还是我应该有一个INDEX并将TENANT_ID置于TYPE下?特别是,哪个选项会消耗更多资源(打开文件/性能)?
忘记数据库类比.弹性搜索中没有表格这样的东西,类比只是在多个层次上突破.架构与索引不完全相同.类型与表无关.Lucene等地区不存在任何行
正如@monkjack建议的那样,最好根据分片的数量进行思考.索引,类型和别名基本上是组织分片的逻辑方法.分片是一个或多或少独立的lucene索引组(对于每个字段),作为一个整体进行管理.给定一个索引类型的文档集合,该集合将被分成n个分片,每个分片都有自己的文件集(每个字段).
群集必须处理的分片数量会对内存,文件句柄数量等产生影响.均衡的群集会为每个节点分配足够少的分片,以便它可以有效地利用其RAM.因此,如果您有10个索引,每个索引有10个分片,那么您有100个分片.如果它们被复制一次,则实际上有200个分片.因此,如果您有4个节点,则每个节点有50个分片.根据碎片的大小可能会或可能不是一个问题.弹性搜索非常有效地处理多个分片并执行诸如在分片上并发索引或跨分片搜索等操作.因此,每个节点1个分片可能不是那么好,每个节点1000个分片可能会导致一些开销.更多分片意味着您可以使用更多节点.如果你只有2个分片和10个节点,你将会有一些机器闲置.反过来可能是一个更好的主意.等等.
索引:分片组.具有复制和分片设置.这些很重要.创建索引后无法更改它们.解决方案如果您必须:使用别名,创建新索引,重新索引数据,切换别名,删除旧索引.
类型:文档组.属于索引.索引可以有多种类型,但它们都共享相同的分片.创建类型时,分片数不会更改.类型可以出现在多个索引中,您可以创建跨多个类型和索引的查询.
别名:一个或多个索引的替代名称.这是一个非常强大的功能,允许您实现例如模式迁移或每天创建一个新索引,只需将别名更改为指向新索引即可.
因此,在您的情况下,拥有数千个拥有自己索引的租户将导致大量分片.可能不是最好的主意.您不希望分片数量与租户数量之间存在直接关联.只有当每个租户的负载是微不足道的,并且每个租户的文档数量无关紧要时,您才可以逃脱它.
如果您希望每个索引具有不同的服务质量,那么在单个索引或多个索引下为每个租户提供自己的类型可能是更好的主意.这样,您可以控制分片数量并使租户在类型级别保持隔离状态.
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |