欢迎投稿

今日深度:

HBase,

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技术细节》

小结:真的是冰山一角,没有人比我更能体会手中无剑心中无剑的感觉了,最近很丧,给我一个动力让我反弹一下吧。

www.htsjk.Com true http://www.htsjk.com/hbase/37121.html NewsArticle HBase, Hbase是分布式、面向列的开源数据库(其实准确的说是面向列族)。HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hbase提供高性能的计算能力,Zookeeper为Hbase提供稳定服务和...
相关文章
    暂无相关文章
评论暂时关闭