ElasticSearch的数据结构
2013-10-21 22:55
218 查看
Elasticsearch的底层搜索是以lucene来实现的。其主要是提供了一个分布式的框架来扩展了lucene,从而实现大数据量的,分布式搜索功能。其实现思想很简单,将大数据量分而治之,哈希分成多份,然后对每一份进行“lucene处理”——用lucene索引、检索,最后将每份结果合并返回。
这里主要介绍下支持这种分布式功能得以实现的数据结构。Elasticsearch中的routingtable信息。
如上图所示,Elasticsearch中的路由信息是分这么四层结构的:
1)RoutingTable:是整个集群的总体路由信息。每个Elasticsearch都可以建立多个索引,这里存储的是各个索引的信息。
2)IndexRoutingTable:是针对一个索引的路由信息。每个索引可以被拆分成不同的shard,这里存储的是各个shard的信息。
3)IndexShardRoutingTable:这个概念不好解释。Elasticsearch的shard是分为主副本的。这里的副本shard可以简单理解为对一个主本shard的备份。他们的数据是相同的,id号是相同的,所不同的是主副本标志位以及所处node等信息。IndexShardRoutingTable中存储针对同一个id号的,所有主副本shard的信息。(可以理解为shard的一个集合。)
4)ShardRouting:分片信息,是路由表信息的最小单元,主要保存了shardId,所属index,所属node节点,是否主本等信息。
还可以从下图了解下:
针对Elasticsearch数据的内存结构,下面给出一张其数据的存储结构如下图所示:
是我在本机搭建的Elasticsearch集群,所生成的数据。本集群是3个节点,因此在nodes文件夹下,会有0、1、2文件夹对应不同的node。我建立了两个索引,分别叫做test和twitter。针对twitter索引,分成5个shard,每个shard只有一个副本。因此从图中可以看到,twitter文件夹下的子文件夹应该是:0 0 1 1 2 2 3 3 4 4.他们均衡的分布在三个node上。并且因为其采用了这种文件夹结构,所以针对同一个shard的主副本是不能在同一个node上的。
结合上面的图片,就会有比较清晰的认识。
Elasticsearch同时还提供了另外一种纬度的路由视图是:RoutingNodes——RoutingNode——MutableShardRouting。
这里主要介绍下支持这种分布式功能得以实现的数据结构。Elasticsearch中的routingtable信息。
如上图所示,Elasticsearch中的路由信息是分这么四层结构的:
1)RoutingTable:是整个集群的总体路由信息。每个Elasticsearch都可以建立多个索引,这里存储的是各个索引的信息。
2)IndexRoutingTable:是针对一个索引的路由信息。每个索引可以被拆分成不同的shard,这里存储的是各个shard的信息。
3)IndexShardRoutingTable:这个概念不好解释。Elasticsearch的shard是分为主副本的。这里的副本shard可以简单理解为对一个主本shard的备份。他们的数据是相同的,id号是相同的,所不同的是主副本标志位以及所处node等信息。IndexShardRoutingTable中存储针对同一个id号的,所有主副本shard的信息。(可以理解为shard的一个集合。)
4)ShardRouting:分片信息,是路由表信息的最小单元,主要保存了shardId,所属index,所属node节点,是否主本等信息。
还可以从下图了解下:
针对Elasticsearch数据的内存结构,下面给出一张其数据的存储结构如下图所示:
是我在本机搭建的Elasticsearch集群,所生成的数据。本集群是3个节点,因此在nodes文件夹下,会有0、1、2文件夹对应不同的node。我建立了两个索引,分别叫做test和twitter。针对twitter索引,分成5个shard,每个shard只有一个副本。因此从图中可以看到,twitter文件夹下的子文件夹应该是:0 0 1 1 2 2 3 3 4 4.他们均衡的分布在三个node上。并且因为其采用了这种文件夹结构,所以针对同一个shard的主副本是不能在同一个node上的。
结合上面的图片,就会有比较清晰的认识。
Elasticsearch同时还提供了另外一种纬度的路由视图是:RoutingNodes——RoutingNode——MutableShardRouting。
相关文章推荐
- elasticsearch数据结构
- elasticsearch核心知识---48.内核级知识点:深入type底层数据结构
- 算法,设计模式,数据结构,多线程以及研究领域的深入是我研究生阶段要完成的任务
- 用Python实现的数据结构与算法:队列
- 数据结构-----链表的逆序
- 数据结构--建立词索引
- 数据结构之向量
- 数据结构--哈夫曼树
- 数据结构-二叉树的性质(三)
- 数据结构--有序表查找
- Linux下安装Elasticsearch
- elasticsearch内存管理
- 数据结构_学习之_ 线性表
- 【数据结构】队列
- 数据结构第1,2章总结
- 【数据结构】线性表顺序结构的操作---C/C++语言
- 【数据结构】二叉树
- 【数据结构】循环队列
- 数据结构系列之链表——双链表删除
- Elasticsearch简单使用系列--使用Java API进行CRUD操作