用Column Family作为索引

用一个ColumnFamily来存储数据,用一个或者多个ColumnFamily来为这些数据提供索引服务,是一个常见的数据存储策略。

索引策略主要依赖需要被索引的数据。记住,索引中的每一行都存储在单一的节点上,所以当一个单行索引被大量使用的时候,这个节点的负载会比平均负载大一些。以下为一些常见使用的索引策略。

一对一

这种情况对应于关系数据库的唯一索引,被索引的值不存在重复,每一个被索引的值都对应于一条记录,可以使用Cassandra的宽表方式来存储索引信息,ColumnFamily的一行数据表示一个索引,每一个列的名称表示被索引的值,每一个列的值表示被索引数据所对应的Row Key。

索引特征:

一个被索引的值匹配一个数据行Key;

每个索引是一个单独的行,该行的每一列为被索引的数据行;

索引的行Key是你要使用的索引的名称;

索引的列名是被索引的值;

索引的列值是被索引的行key;

使用案例:

存在一个会员列表Users(user_id、name、email、addresss),每一行表示一条会员信息,其中存在一个User_ID列表示该会员的数字ID,具有唯一性。由于业务需要根据User_ID来查找用户信息,所以可以给User_ID建一个唯一索引。

在Cassandra中建立一个ColumnFamily,UNIQUE_INDEX

TableName: UNIQUE_INDEX

Row Key

INDEX_USERS_USER_ID

ColumnName

10000055

1000898

4562221

Value

USERS_ROW_KEY1

USERS_ROW_KEY2

USERS_ROW_KEY2

 

一个对几个

这种情况对应于关系数据库的普通索引,同样的值允许重复,但是重复的次数不会太多,并且对于重复值的读取存在一定的集合性。与前述的唯一索引类似,在索引的ColumnFamily中,依然是一个行对应于一个索引,行Key即为索引名称,不一样的地方在于Column是使用Super Column,对于被索引的值对应得多条记录,则分别用SuperColumn中的Sub Column来加以区别,超列名称为被索引的值,子列名称为索引值所对应的多条记录的Row Key,子列的值不需要存储任何信息。

索引特征:

一个被索引的值匹配几个行Key;

每个索引是一个单独的行,每个索引的值是一个超列;

索引的行Key是你要使用的索引的名称;

索引的超列名称是被索引的值;

索引的超列中的子列名称是被索引的行key;

超列中的子列没有值;


 

一个对多个

这种情况对应于关系数据库的位图索引,被索引的值具有一定的枚举性,每一个被索引的值都对应着成千上万的记录信息。我们常见的有对于状态的索引,比如Users表有一个字段,Status(1 初始化 2 待审核 3 审核通过 4 审核不通过 5 作废),业务需要根据状态来查询用户信息,则需要在Status上建立索引信息。对于每一个这样的索引字段,都需要使用一个专有的Column Family存储,对于行Key,则为被索引的值,对于列名则为被索引的值所对应的及记录的Row Key。

索引特征:

 

一个被索引的值匹配许多行Key;

每一个被索引的值只接受它自己的行;

每一个索引的行Key匹配被索引的行的列值;

列名称可以是:

   行Key,在没有排序要求的情况下;

   用于去排序Key的值;列值包含行keys;

每一个被索引的列名使用一个column family;


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值