HBase,
Hbase是分布式、面向列的开源数据库(其实准确的说是面向列族)。HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hbase提供高性能的计算能力,Zookeeper为Hbase提供稳定服务和Failover机制,因此我们说Hbase是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。
特点:
1.海量存储,适合存储PB级别的海量数据
2.列式存储
3.极易扩展
4.高并发
5.稀疏
HBase是列式存储,这是形象的图
HBase数据模型与类之间关系:
连接数据库中相关命令
hbase shell //连接hbase数据库
list //显示数据库中相关表
scan 'rt_uid_full_orderdetail',{limit=>5} //扫描相关表
Java根据条件从HBase中查询内容
scan–>ResultScanner–>遍历到map中
public List<Map<String, Object>> getOrders(String strTableName, String uid, Integer days, Collection<String> fields) {
List<Map<String, Object>> orders = new ArrayList<>();
//扫描条件rowkey
Scan scan = buildScan(uid, days);
if (CollectionUtils.isEmpty(fields)) {
scan.addFamily(COMPARE_FAMILY_BYTES); //扫描条件Family
} else {
fields.forEach(field -> scan.addColumn(COMPARE_FAMILY_BYTES, Bytes.toBytes(field)));//扫描条件Column
}
Connection connection = hbaseService.getConnection();//连接数据库
TableName tableName = TableName.valueOf(strTableName);
try {
Table table = connection.getTable(tableName);
ResultScanner scanner = table.getScanner(scan); //table扫描
scanner.forEach(result -> {
String row = Bytes.toString(result.getRow());
int i = row.indexOf('_');
int j = row.lastIndexOf('_');
Map<String, Object> order = new HashMap<>(8);
order.put("sid", row.substring(j + 1));
order.put("mills", Long.parseLong(row.substring(i + 1, j)));
Cell[] cells = result.rawCells();
order = storeToMap(cells, order);
orders.add(order);
});
} catch (Exception e) {
logger.error("getOrders error", e);
}
return sortByMills(orders);
}
推荐博客:《HBase技术细节》
小结:真的是冰山一角,没有人比我更能体会手中无剑心中无剑的感觉了,最近很丧,给我一个动力让我反弹一下吧。
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。