Hbase的原理之B+树和LSVM树的区别

目录

 

共同点

区别

B+树

LSVM(Log-Structured Merge Tree)

实现原理

LSVM树


共同点

都是底层数据存储的数据结构

区别

B+树

  • 通常用于数据库和操作系统的文件系统
  • 插入和修改有较稳定的Logn时间复杂度
  • 自底向上插入
  • 寻道方式的磁盘使用

LSVM(Log-Structured Merge Tree)

  • 用于为具有很高记录更新(插入或删除)频率的文件提供索引机制
  • 一个内存组件和一个或多个磁盘组件(通过类似归并排序联合使用)
  • 适用于索引插入比查询更常见的情况
  • 常用与历史记录表和日志文件
  • 传输方式的磁盘使用
  • 把随机写转化成顺序写,减少磁盘寻道时间

实现原理

 

LSVM树

  • 划分不同等级树,一棵树位于内存(B树或者AVL树),一棵树位于磁盘
  • 数据先插入内存中的树,内存中的树达到阈值时从左到右与磁盘中的树合并,合并后的数据量达到磁盘的存储页大小时,持久化到磁盘,同时更新父子节点指针
  • 查找时先从内存树找,没有再去磁盘树找
  • 定期合并,并flush到磁盘,可设置TTL,合并进程根据TTL删除无效的已删除数据

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过使用HBase Java API中的`Get`类来获取特定列族和列名的值。下面是一个简单的示例代码: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.util.Bytes; public class HBaseGetExample { public static void main(String[] args) throws Exception { // 1. 创建配置对象并设置 HBase 连接参数 Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost"); config.set("hbase.zookeeper.property.clientPort", "2181"); // 2. 创建 HBase 连接对象和表对象 Connection connection = ConnectionFactory.createConnection(config); Table table = connection.getTable(TableName.valueOf("table1")); // 3. 创建 Get 对象,设置需要查询的行键和列族、列名 Get get = new Get(Bytes.toBytes("row1")); get.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("col1")); // 4. 执行查询操作并处理结果 Result result = table.get(get); for (Cell cell : result.listCells()) { String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); System.out.println("value = " + value); } // 5. 关闭连接和表对象 table.close(); connection.close(); } } ``` 在上面的代码中,我们首先创建一个`Configuration`对象并设置HBase连接参数。然后,创建`Connection`对象和`Table`对象来获取对表的访问。接下来,我们创建一个`Get`对象,并设置需要查询的行键和列族、列名。最后,执行查询操作并处理结果。注意,这里我们使用`Cell`对象来遍历结果集并获取值,因为可能存在一个行键对应多个列族和列名的情况。 希望这个示例代码对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值