Coprocessor是HBase 0.92.0引入的特性.使用Coprocessor.能够将一些计算逻辑下推到HBase节点,HBase由一个单纯的存储系统升级为分布式数据处理平台. Coprocessor分为两种:Observer和Endpoint. Observer能改动扩展已有的client操作功能.而Endpoint能引入新的client操作. Observer Observer的作用类似于数据库的触发器或者AOP中的advice.下图为Put操作添加Observer,当中1-2-4-…
本章以山寨版Twitter为例介绍HBase Schema设计模式.广义的HBase Schema设计不仅仅包含创建表时指定项,还应该综合考虑Column families/Column qualifier/Cell value/Versions/Rowkey等相关内容. 灵活的Schema&简单的存储视图 Schema设计和数据存储及訪问模式关系密切,先回想下HBase数据模型.有几个要点: 被索引的部分包含Row Key+Col Fam+Col Qual+Time Stamp 因为HBase…
HBase Shell HBase shell使用起来最方便,进入HBase shell控制台就可以使用. $ $HBASE_HOME/bin/hbase shell 常见操作有create(创建表)/put(插入或更新数据)/get(依据rowkey查询)/scan(范围查询)/delete(删除列)/deleteAll(依据rowkey删除整行数据)/disable&drop(禁用表之后再删除). 基于数据库的项目,往往会在某个文件夹下存储专门的sql脚本,记录每次迭代数据库变更:同理,HB…
新项目准备上HBase.HBase眼下由组里某牛负责.本着学会使用HBase的目标,先阅读下HBase in Action,一共十章组织成三部分,须要学习的内容包含HBase基本实现原理,用法,Schema设计原则和实战等.借用Michael Stack(HBase Chair)的话,"At a highlevel, HBase is like theatomic bomb. Its basic operation can be explained onthe back of a napkin…
第四节 输入与输出 上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作. 上一篇笔记用到的 read(STDIN_FILENO, buf, BUFFSIZE) 和 write(STDOUT_FILENO, buf, n) 函数中的2个参数 STDIN_FILENO 和 STDOUT_FILENO 是 __POSIX__标准的一部分,很多函数原型都在其中,这2个参数定义在 头文件中,他们是标准输入输出的文…
OpenTSDB是基于HBase的开源监控系统,能够支持上万规模集群监控和上亿数据点採集. 当中TSDB代表Time Series Database,OpenTSDB在时间序列数据的存储和查询上都做了相当多的优化工作. 架构Overview 概念上OpenTSDB由三部分组成:tcollector数据採集.tsd数据服务和HBase数据存储. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaWRvbnR3YW50b2Jl/font/5a6L5L2T/f…
本章介绍用HBase存储.高效查询地理位置信息. Geohash空间索引 考虑LBS应用中常见的两个问题:1)查找离某地近期的k个地点.2)查找某区域内地点. 假设要用HBase实现高效查找,首先要考虑的是空间局部性(Spatial Locality),即位置上相近的点得物理存储在一起. 最简单的地理位置数据由两个维度组成:经度X和纬度Y.那么相相应最简单的Rowkey也能够由X和Y组成.Rowkey的有序性决定了数据首先依照经度X排序.再依照纬度Y排序,这样的方式最大的问题是经度值相等的A地点…
本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public static void sort(Comparable a[]){ int N = a.length; for(int i = 0; i < N; i ++){ int min = i; //最小元素索引 for(int j = i + 1; j < N; j++){ if(less(a[j], a…
2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是技术性的,它与Python内部的运作方式有关.这也是内建函数可能返回元组的原因.一般来说,在几乎所有的情况下列表都可以替代元组. 编写一个列表: >>> edward=['Edward Gumby',42] 构建如下的一个人员信息的列表也是可以的,这个列表就是你的数据库: >>&…