scylladb数据存储结构

一、整体结构

scylladb的大致存储结构如下图所示。

1.一个集群有多个节点组成,一个节点是一个scylladb服务,一般就是一台主机。

2.集群中可以创建多个keyspace,每个keyspace都分布在所有节点上,可以针对keyspace指定副本数、副本策略等属性

3.keyspace中可以创建多个column family,column family类似与sql中的表,可以指定列的名称、类型等信息,可以对行进行插入、删除、更新操作

4.parition key是一个特殊的列,作为分区(即分partition,一个partition中的数据保存到同一个节点中)的依据,分区使用一致性hash算法,后面介绍。也可以组合使用多个列作为partition key

5.cluster key也是一个特殊的列,作为一个分区内的排序依据,搜索时指定[特定parition key]+[cluster key的范围]可以进行快速搜索。

6.primary key由partition key和cluster key组合而成,primary key不可重复。

二、一致性hash算法

1.每个node有一个tokentoken计算哈希值并对应到一个圆环上,圆环对应一个数值范围,新版本上应该是0~2^64。圆环上的这些node将圆环分成了多个区间,一个区间属于这个区间的端点上的node

2.对每个rowpartition key计算其hash值,也分布到圆环上,会属于其中一个区间,该row会报存到该区间所属的node

3.新增/删除node时,数据分布会发生变化,需要迁移。

4.为了使数据分布更均匀,一个node实际会有多个token。这样新增、删除node时数据分布会更均匀。

三、文件结构

1.Memtable

写入SSTable前会先在内存中进行缓存,当达到一定条件(超过上限,或者超过时间间隔)后再写入SSTable

2.Commitlog

写入数据时,首先记录到Commitlog中,保存在硬盘。写入到SSTable后会删除Commitlog中对应内容

3.SSTable

保存数据。一个SSTable保存一个ColumnFalimy的一部分数据。SSTable中保存的数据是连续的,即

4. Filter

使用了Bloom Filter,用于快速判断一个key是否保存在当前SSTable

5.Index

保存一个keyData中的位置,避免读取数据时需要读取整个Data文件。

四、bloom filter

1.bloom filter

m位的数组

2.hash算法

使用khash算法,用于生成元素的hash值。图中是3hash算法,对一个元素x13个算法各自生成一个值,生成了3hash值。

3.更新bloom filter

对新元素使用khash算法生成khash值,将hash值对应的位置为1

4.判断是否通过bloom filter

对一个需要判断的元素y,使用khash算法生成khash值,对应的位上的值全为1则通过,否则不通过

5.存在误判,误判概率的计算、相关参数的设置依据参考:https://blog.csdn.net/jiaomeng/article/details/1495500

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值