hbase查询100万条数据的时间,hbase查询最新的一条记录
HBase怎么实现海量数据的毫秒级查询
Base中单表的数据量通常可以达到TB级或PB级,但大多数情况下数据读取可以做到毫秒级。HBase是如何做到的哪?要想实现表中数据的快速访问,通用的做法是数据保持有序并尽可能的将数据保存在内存里。HBase也是这样实现的。
对于海量级的数据,首先要解决存储的问题。
数据存储上,HBase将表切分成小一点的数据单位region,托管到RegionServer上,和以前关系数据库分区表类似。但比关系数据库分区、分库易用。这一点在数据访问上,HBase对用户是透明的。

mongodb与hbase
HBase没有研究过,因为我们公司用Erlang开发,这个数据库直接不支持。
mongodb当时选型的时候部分数据可以给你看看,最后也没有选:
mongodb
一、性能
1.在mongodb shell中对单个数据库中未建立索引插入100万条数据时花费1分钟左右时间。建立索引后100W条数据时性能下降不明显。
插入速度 10000/s
2.使用Tony编写的Erlang-mongodb驱动用编程语言对单个数据库插入100W条数据,每个数据7个字段,没有建立索引的情况下花费大约3分钟。
插入速度 5000/s
3.使用Tony编写的Erlang-mongodb驱动用编程语言向有3个数据节点2个arbiter的副本集(replica set)插入100W条数据时花费13分钟左右。
插入速度 1000/s
4.使用Tony编写的Erlang-mongodb驱动用编程语言,有500个并发时,向有3个数据节点2个arbiter的副本集(replica set)插入100W条数据时花费13分钟左右。
插入速度 1000/s
5.在1000W条数据时对创建索引的信息查询时性能都很不错。
6.索引大小大于内存时查询性能会急剧下降。
二、可靠性
1.单机可靠性通过journal保证。
journal相当于redo日志,是mongodb存储在磁盘上的操作日志。系统默认每100ms会将操作写入journal文件,journal文件再将操作对内存中的shared view进行修改。系统默认每60s会将内存中的shared view写入硬盘的数据库文件。数据文件由shared view写入数据文件,journal文件中已输出到数据文件的操作会被删除。如果发生非正常关闭,重新打开时mongodb的journal上的写操作会重演。
写操作图解:
默认每100ms(该参数通过启动mongos时de journalCommitInterval设置)将操作写入磁盘上的journal,journal会将操作写入内存中的shared view
默认每60秒(该参数通过启动mongod时使用syscdelay设置)shared view会将数据写入磁盘上的数据文件中,被写入磁盘的操作会从journal中删除
2.mongodb通过replica set提高集群的可靠性。
replica set正常运行时在其中由一个primary和若干个secondary和arbiter。仅可以对primary进行读写操作,通过连接上secondary并设置rs.slaveOk()后可以对secondary进行读操作。对primary的写操作会自动同步到状态正常的secondary上。
当primary非正常退出时replica set会自动选出新的primary,并可以保持继续运行。在节点切换时会有短时间无法进行写操作。replica set中可以参加选举的节点越多,系统能够保证在更多节点崩溃时继续运行。同一个replica set中具有选举权的节点不能超过七个。
需要注意的地方:
(replica set中增加数据节点似乎会降低写入的速度,还要进一步核实。)
。。。。。。
三、对写入失败的处理
为了减少写操作等待时间,默认情况下写入失败时mongodb不会返回错误信息。
。。。。。。
四、事务
MongoDB只支持对单行记录的原子性修改,并不支持对多行数据的原子操作。通过一些操作步骤,实际上也可以自己实现该事务。 其步骤如下:
。。。。。
五、使用中其他可能遇到的问题
1.存储空间占用不断增大
。。。。
因为是之前花了很久实验的结果,公司也不让随便发这些东西,全文不能这里透露,你可以留邮箱,发给你
HBase条件查询(多条件查询)
转
文中可能涉及到的API:
Hadoop/HDFS:
HBase:
Begin!
HBase的查询实现只提供两种方式:
1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get)
2、按指定的条件获取一批记录,scan方法(org.apache.hadoop.hbase.client.Scan)
实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:
1、scan可以通过setCaching与setBatch方法提高速度(以空间换时间);
2、scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。
通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。
3、scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础。
下面举个形象的例子:
我们在表中存储的是文件信息,每个文件有5个属性:文件id(long,全局唯一)、创建时间(long)、文件名(String)、分类名(String)、所有者(User)。
我们可以输入的查询条件:文件创建时间区间(比如从20120901到20120914期间创建的文件),文件名(“中国好声音”),分类(“综艺”),所有者(“浙江卫视”)。
假设当前我们一共有如下文件:
内容列表
ID CreateTime Name Category UserID
1 20120902 中国好声音第1期 综艺 1
2 20120904 中国好声音第2期 综艺 1
3 20120906 中国好声音外卡赛 综艺 1
4 20120908 中国好声音第3期 综艺 1
5 20120910 中国好声音第4期 综艺 1
6 20120912 中国好声音选手采访 综艺花絮 2
7 20120914 中国好声音第5期 综艺 1
8 20120916 中国好声音录制花絮 综艺花絮 2
9 20120918 张玮独家专访 花絮 3
10 20120920 加多宝凉茶广告 综艺广告 4
这里UserID应该对应另一张User表,暂不列出。我们只需知道UserID的含义:
1代表 浙江卫视; 2代表 好声音剧组; 3代表 XX微博; 4代表 赞助商。
调用查询接口的时候将上述5个条件同时输入find(20120901,20121001,"中国好声音","综艺","浙江卫视")。
此时我们应该得到记录应该有第1、2、3、4、5、7条。第6条由于不属于“浙江卫视”应该不被选中。
我们在设计RowKey时可以这样做:采用UserID + CreateTime + FileID组成rowKey,这样既能满足多条件查询,又能有很快的查询速度。
需要注意以下几点:
1、每条记录的RowKey,每个字段都需要填充到相同长度。假如预期我们最多有10万量级的用户,则userID应该统一填充至6位,如000001,000002...
2、结尾添加全局唯一的FileID的用意也是使每个文件对应的记录全局唯一。避免当UserID与CreateTime相同时的两个不同文件记录相互覆盖。
按照这种RowKey存储上述文件记录,在HBase表中是下面的结构:
rowKey(userID 6 + time 8 + fileID 6) name category ....
00000120120902000001
00000120120904000002
00000120120906000003
00000120120908000004
00000120120910000005
00000120120914000007
00000220120912000006
00000220120916000008
00000320120918000009
00000420120920000010
怎样用这张表?
在建立一个scan对象后,我们setStartRow(00000120120901),setEndRow(00000120120914)。
这样,scan时只扫描userID=1的数据,且时间范围限定在这个指定的时间段内,满足了按用户以及按时间范围对结果的筛选。并且由于记录集中存储,性能很好。
然后使用SingleColumnValueFilter(org.apache.hadoop.hbase.filter.SingleColumnValueFilter),共4个,分别约束name的上下限,与category的上下限。满足按同时按文件名以及分类名的前缀匹配。
(注意:使用SingleColumnValueFilter会影响查询性能,在真正处理海量数据时会消耗很大的资源,且需要较长的时间。
在后续的博文中我将多举几种应用场景下rowKey的,可以满足简单条件下海量数据瞬时返回的查询功能)
如果需要分页还可以再加一个PageFilter限制返回记录的个数。
以上,我们完成了高性能的支持多条件查询的HBase表结构设计。
bulkload 千万条数据hbase多长时间
传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成
为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制
等要求。
传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化。它是实现自动
检测和自动控制的首要环节。传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,
让物体慢慢变得活了起来。通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、
力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大
类