# Kudu

# Kudu的特点

  1. Kudu+Impala介绍 | 微店数据科学团队博客 (opens new window)
  2. Kudu作为底层存储,在支持高并发低延迟kv查询的同时,还保持良好的Scan性能,该特性使得其理论上能够同时兼顾OLTP类和OLAP类查询
  3. 原意为非洲不同品种羚羊,速度快

# kudu和impla 的不足之处

# Kudu主键的限制

  • 表创建后主键不可更改;
  • 一行对应的主键内容不可以被Update操作修改。要修改一行的主键值,需要删除并新增一行新数据,并且该操作无法保持原子性;
  • 主键的类型不支持DOUBLE、FLOAT、BOOL,并且主键必须是非空的(NOT NULL);
  • 自动生成的主键是不支持的;
  • 每行对应的主键存储单元(CELL)最大为16KB。

# Kudu列的限制

  • MySQL中的部分数据类型,如DECIMAL, CHAR, VARCHAR, DATE, ARRAY等不支持;
  • 数据类型以及是否可为空等列属性不支持修改;
  • 一张表最多有300列。

# Kudu表的限制

  • 表的备份数必须为奇数,最大为7;
  • 备份数在设置后不可修改。

# Kudu单元(Cells)的限制

  • 单元对应的数据最大为64KB,并且是在压缩前。

# Kudu分片的限制

  • 分片只支持手动指定,自动分片不支持;
  • 分片设定不支持修改,修改分片设定需要”建新表-导数据-删老表”操作;
  • 丢掉多数备份的Tablets需要手动修复。

# Kudu容量限制

  • 建议tablet servers的最大数量为100;
  • 建议masters的最大数量为3;
  • 建议每个tablet server存储的数据最大为4T(此处存疑,为何会有4T这么小的限制?);
  • 每个tablet server存储的tablets数量建议在1000以内;
  • 每个表分片后的tablets存储在单个tablet server的最大数量为60。

# Kudu其他使用限制

  • Kudu被设计为分析的用途,每行对应的数据太大可能会碰到一些问题;
  • 主键有索引,不支持二级索引(Secondary indexes);
  • 多行的事务操作不支持;
  • 关系型数据的一些功能,如外键,不支持;
  • 列和表的名字强制为UTF-8编码,并且最大256字节;
  • 删除一列并不会马上释放空间,需要执行Compaction操作,但是Compaction操作不支持手动执行;
  • 删除表的操作会立刻释放空间。

# Impala的稳定性

  • Impala不适合超长时间的SQL请求;
  • Impala不支持高并发读写操作,即使Kudu是支持的;
  • Impala和Hive有部分语法不兼容。