Hbase实际存储为字节数组。采用Long代替String类型作为RowKey。
优点:
1.Long为8个字节,最大可以表示20位数,除去最高位,相当于19个字符,1个字符=1个字节,采用Long代替字符串存储能节省存储空间。
2.操作系统为64位,内存8字节对齐,能提高存取速度。 因此Rowkey总长度设置为19位,为:时间编码+省市编码+瓦片编码。
原始时间格式:2015-10-10 01:00:00, RowKey中的时间编码设置为:将原始时间格式转换为10位的时间戳,能精确到秒级
19-10位:精确到秒级数据的时间戳
为了保证RowKey的有序性,提高查询效率,将省、市名称映射为编号,其中:
9-8位:省,从01开始编号,采用00代表全国的污染物空间插值数据
7-6位:市,从01开始编号,采用00代表省级数据,例如0100为以省01作为空间插值的栅格数据
需要构建省市-编码表。
RowKey | ColumnFamily:cf1 | ColumnFamily:cf1 |
---|---|---|
省市编号 eg:0101 | Column:c1 | Column:c2 |
--- | 省市名称,eg: 湖北省武汉市 | 经纬度范围
省市名称-编号可以缓存到内存中,提高查询效率,然后可根据缓存定位到编号,查询经纬度坐标等其它属性信息。
采用Hilbert曲线对瓦片编码,保持瓦片空间上的临近性,提高批量读取连续的瓦片块效率。
5-1位:作为瓦片编号,00000-99999,因此一个连续型栅格数据最多只能划分为10W个瓦片;单个瓦片内的数据相似度较高,压缩存储,节省存储空间,降低磁盘读写时间。
Table2:核心瓦片数据表
RowKey | ColumnFamily:cf1 | ColumnFamily:cf2 | ColumnFamily:cfn | ColumnFamily:cf,此列族存储属性信息 ---|---|---|---|---|--- 时间编码+省市编码+瓦片编码 Long:2015101001-0101-00001 | Column:c1, 污染物1 | Column:c1, 污染物2 | Column:c1, 污染物n | Column:c1 Column:c2 Column:c3 Column:c4 --- | 压缩后的瓦片数据 | 压缩后的瓦片数据| 压缩后的瓦片数据 | 瓦片长宽 瓦片起始经纬度 像素尺度,即每个像素点的大小
1.省、市污染物数据查询 时间编码+省市编码组成RowKey查询,得到所有瓦片。
2.根据经纬度范围查询 方法一: 先查出所有的瓦片,和对应瓦片的经纬度,再将不在查询经纬度范围内的瓦片剔除,得到需要的瓦片值。
方法二:
需要算出待查询的经纬度范围经过哪些瓦片,再根据时间编码+省市编码+瓦片编号组成的RowKey,得到待查询范围相关的瓦片。
此方法需要建立经纬度-瓦片的映射表,经纬度需要采用GeoHash编码,结合时间、省市形成RowKey。
RowKey | ColumnFamily:cf1 |
---|---|
时间编码+省市编码+GeoHash编码 String:2015101001-0101-w4fv | Column:c1 |
--- | 瓦片编号 |