为了保证回复实时性,有任何问题欢迎加我QQ:451443165 讨论?(申请问题答案:xiaof22a)
我在第一部分GeoMesa源码学习(3):空间索引——part 1中简要绍了GeoMesa中使用的Z-order填充曲线方法。本节我们来介绍下GeoMesa是如何运用Z-order sfc来生成row key并实现分片存储的。
1. 关于数据分片(shard)
首先介绍一下HBase中的shard。HBase把一起访问的数据也存储在一起,实现了高扩展。主要的设计思想是按照主键(row key)分片数据。针对数据做水平分片(horizontal shard), 根据主键的范围(row key range)查询。 不同主键范围(row key range)下的数据被分配到不同的服务器中。每台服务器的数据是全体数据的子集。HBase实际上是BigTable存储系统的一个开源实现,Bigtable是由Google开发的分布式存储系统,用来管理可扩展的,大容量的结构化数据。在HBase中,表格的Rowkey按照字典排序,Region按照RowKey设置split point进行shard,通过这种方式实现的全局、分布式索引,成为了其成功的最大的砝码。
Hbase 的 Pre-splitting
Hbase创建新表(table)时候会默认的分配一个region给table,所有的读写请求都会访问到同一个regionServer的同一个region中,而集群中的其他regionServer就处于比较空闲的状态,从而达不到负载均衡的效果。解决方案是使用pre-splitting,在创建table的时候就配置好切分点,将表格row key划分为多个region。如果我们可以大概预测到row key的分布,我们可以使用pre-spliting来帮助我们提前split region。表较好的经验是首先预测split的切分点,做pre-splitting,然后后面让auto-split来处理后面的负载均衡。
Hbase自带了两种pre-split的算法: