列族

列族是表中的一组列,它们作为单个键值对存储在底层键值存储中。列族减少了键值存储中的键的数量,从而提高了INSERTUPDATEDELETE操作的性能。

本页解释了hubble如何将列组织成系列。

以下介绍默认行为和手动操作的情况,鼓励手动操作。

默认行为

创建表时,所有列都存储为单个列族。

在大多数情况下,这种默认方法可确保高效的键值存储和性能。然而,当频繁更新的列与很少更新的列组合在一起时,很少更新的列仍然会在每次更新时被重写。特别是当不频繁更新的列很多时,将它们拆分成一个不同的系列会更高效。也就是说将频繁更新的列与不频繁更新的列放在不同的列族中。

手动操作

在创建表时分配列族

要在创建表时手动分配列族,请使用FAMILY关键字。

假定有一张基础的客户信息表,通常情况下姓名和身份证号是不变的,工作地址会变动,这样可以分为两个列族

create table cust (
    id INT PRIMARY KEY,
    name string,
    card_no string,
    address string,
    family f1 (id, name,card_no),
    family f2 (address)
);
show create cust;
  table_name |                create_statement
-------------+-------------------------------------------------
  cust       | CREATE TABLE public.cust (
             |     id INT8 NOT NULL,
             |     name STRING NULL,
             |     card_no STRING NULL,
             |     address STRING NULL,
             |     CONSTRAINT "primary" PRIMARY KEY (id ASC),
             |     FAMILY f1 (id, name, card_no),
             |     FAMILY f2 (address)
             | )
(1 row)

添加列时分配列族

当使用ALTER TABLE .. ADD COLUMN语句向表中添加列时,可以将该列分配给新的或现有的列族。

  • 使用CREATE FAMILY关键字将新列分配给新列族
alter table cust add column sex string create family f3;
  • 使用CREATE FAMILY关键字将新列分配给现有列族
alter table cust add column tell_no string  family f1;

如果一个列被添加到表中并且没有指定族,它将被默认添加到第一个列族中。