kudu

特点

hdfs存储,共吞吐但无法随机读写
Hbase存储,可以随机读写但吞吐量不够
kodo存储,既支持随机读写,又支持OLAP分析的大数据存储引擎
kudu集群由多个表组成,每个表由多个字段组成,有主键
水平拆分,永于存储
主从架构

核心API

写包括Insert、Update、Delete,所有写必须指定主键,读提供了Scan操作
Scan是可以指定过滤器过滤数据

一致性

如A,B 所以你不应先看到B没看到A,(数据在读的时候正在改,导致一个事物
多次读取到的数据可能不一致),所以可以在Client之间传播带有时间戳的token,
还有控制时间误差的方案称为 TrueTime,表示当前绝对精确时间在
TT.now().latest和 TT.now().earliest 之间。

KUDU 中存在两个角色

Mater Server:负责集群管理、元数据管理等功能
Tablet Server:负责数据存储,并提供数据读写服务
先从 Master Server 获取元数据信息,然后去 Tablet Server 读写数据

分区策略

横向分区
一,按照字段值范围分区,HBase就是采用了这个
二,按照字段hash值进行分区
三,对一个表指定一个范围分区规则和多个Hash分区规则

存储设计

列式存储,快速地列扫描,低延迟地随机更新,稳定性

存储实现

KUDU 的存储也是通过 LSM 树(Log-Structured Merge Tree)来实现的。KUDU 的最小存储单元是 RowSets,KUDU 中存在两种 RowSets:MemRowSets、DiskRowSets,数据先写内存中的 MemRowSet,MemRowSet 满了后刷到磁盘成为一个 DiskRowSet,DiskRowSet 一经写入,就无法修改了。
应对数据变更
DiskRowSet 是不可修改了,那么 KUDU 要如何应对数据的更新呢?在 KUDU 中,把 DiskRowSet 分为了两部分:base data、delta stores。base data 负责存储基础数据,delta stores负责存储 base data 中的变更数据。每份 DiskRowSet 在内存中都会有一个对应的 DeltaMemStore,负责记录此 DiskRowSet 后续的数据变更(更新、删除)

构建maven工程,导入依赖

<dependencies>

<dependency>

<groupId>org.apache.kudu</groupId>

<artifactId>kudu-client</artifactId>

<version>1.6.0</version>

</dependency>

   

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

</dependency>

</dependencies>

初始化方法

public class TestKudu {

//定义KuduClient客户端对象

private static KuduClient kuduClient;

//定义表名

private static String tableName="person";

   

/**

* 初始化方法

*/

@Before

public void init(){

//指定master地址

String masterAddress="node1,node2,node3";

//创建kudu的数据库连接

kuduClient = new KuduClient.KuduClientBuilder(masterAddress).defaultSocketReadTimeoutMs(6000).build();

   

}

   

//构建表schema的字段信息

//字段名称 数据类型 是否为主键

public ColumnSchema newColumn(String name, Type type, boolean isKey){

ColumnSchema.ColumnSchemaBuilder column = new ColumnSchema.ColumnSchemaBuilder(name, type);

column.key(isKey);

return column.build();

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值