陆续根据Geomesa和自身GIS空间数据库经验梳理了5篇试验代码, 但是还没有好好思考总结下整个技术脉络,现总结如下:
Hbase特点:
1.一个高可靠性、高性能、面向列、可伸缩的分布式存储系统(可认为不是数据库,他的数据写到hdfs)
2.一个KeyValue存储系统, key和Value都支持byte存储得列式分布式数据源;
3.不支持事物, 除非外部使用其他分布式事物组件封装;
4.Value不支持索引;
5.所有数据按照key递增存储, 这里将hbase理解为一个大得多层分布式”跳表”
6.所有数据默认带时间版本信息,默认过期版本3, 它并不直接删除数据
7.不支持SQL查询,有三方组件可转换where字句到hbaseFilter复合对象
8.基本概览Namespace(类似database) table(表) Rowkey(行键值) Family(列簇) Qualifier(列) Value(值);
开源,大厂,论文实现:
开源: GeoMesa
1.它是一个开源的进行时空数据处理的工具包(基于Scala),
2.locationtech出品,与JTS, GeoTrellis 同源,社区较活跃;
3.可同时支持HBase、Spark,kudu,Arrow,bigtable,kafa,redis等
4.Hbase+GeoMesa 相当于 Postgresql+POSTGIS
大厂: 基本上基于GeoMesa扩展自身业务;
1. 阿里 (Hbase Ganos) 以PaaS提供, 但是不支持SQL;(GeoMesa扩展)
2.华为 (CloudTable)以PaaS提供(GeoMesa扩展)
3.京东JUST , (可能是GeoMesa扩展)
论文:
大规模时空数据分布式存储 方法研究 ( 中国科学院计算技术研究所 北京 1 0 01 9 0)2014
基于Hbase的海量GIS数据分布式处理实践 (中国科学院计算技术研究所 2016
客户端查询根据范围计算出Key, 然后用Key的范围去查询或者每条Key遍历取数据
核心总结抽象为一句话: 空间数据编码及根据范围查询出对应范围的编码序列key.
不管是Geomesa系列还是论文系列都是这个逻辑,只不过一个在客户端做,一个在服务端做
抽象为代码总结为以下接口:
byte[] encode(double xmin, double ymin, double xmax, double ymax);
double [] decode(byte[] bts);
ArrayList<byte[]> QueryRange(double xmin, double ymin, double xmax, double ymax);
最后做编码总结, 文字描述总是苍白无力, 来张图z2 和xz的编码顺序图 (注意不是编码图编码图网上一堆,这是编码后得顺序图)

另外有一个重要问题:
Z索引适合点被查询box包含,
XZ索引(面,线)很可能查询也只能满足包含查询, 而不是真正意义上的空间数据库级别的相交查询, 因为无法解决跨边界得问题, 如下图:

所以在前面尝试在空间数据表中加入了xmin, ymin,xamx,ymax 来过滤查询用4个SingleColumnValueFilter来解决, 虽然解决了问题, 但是没有大规模测试.,不敢说效率如何. base研究暂时到这里, 建议有能力的直接用geomesa


819

被折叠的 条评论
为什么被折叠?



