IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Cassandra存储机制

NinGoo.net 2010-02-26 09:04:48 累计浏览 4,646 次
本机暂存

    在2009年兴起的NoSQL运动中,Cassandra是其中重要的一个分布式key-value数据库产品,由Facebook在2008年开源,目前是Apache的顶级项目。最近twitter的一篇声明,表示将从MySQL迁移到Cassandra,更让其声名大振。Cassandra是结合了Google Bigtable的数据模型和Amazon Dynamo高可用框架的一个产品。其数据模型可以参考张瑞的blog

    值得说一下的是Cassandra的存储机制,也是借鉴了Bigtable的设计,采用Memtable和SSTable的方式。和关系数据库一样,Cassandra在写数据之前,也需要先记录日志,称之为commitlog,然后数据才会写入到Column Family对应的Memtable中,并且Memtable中的内容是按照key排序好的。Memtable是一种内存结构,满足一定条件后批量刷新到磁盘上,存储为SSTable。这种机制,相当于缓存写回机制(Write-back Cache),优势在于将随机IO写变成顺序IO写,降低大量的写操作对于存储系统的压力。SSTable一旦完成写入,就不可变更,只能读取。下一次Memtable需要刷新到一个新的SSTable文件中。所以对于Cassandra来说,可以认为只有顺序写,没有随机写操作。

    因为SSTable数据不可更新,可能导致同一个Column Family的数据存储在多个SSTable中,这时查询数据时,需要去合并读取Column Family所有的SSTable和Memtable,这样到一个Column Family的数量很大的时候,可能导致查询效率严重下降。因此需要有一种机制能快速定位查询的Key落在哪些SSTable中,而不需要去读取合并所有的SSTable。Cassandra采用的是Bloom Filter算法,通过多个hash函数将key映射到一个位图中,来快速判断这个key属于哪个SSTable。关于Bloom Filter,有兴趣的可以去看看参考文章3和4。

    为了避免大量SSTable带来的性能影响,Cassandra也提供一种定期将多个SSTable合并成一个新的SSTable的机制,因为每个SSTable中的key都是已经排序好的,因此只需要做一次合并排序就可以完成该任务,代价还是可以接受的。所以在Cassandra的数据存储目录中,可以看到三种类型的文件,格式类似于:

Column Family Name-序号-Data.dbColumn Family Name-序号-Filter.dbColumn Family Name-序号-index.db

    参考文章:

    [1].http://wiki.apache.org/cassandra/MemtableSSTable

    [2].http://wiki.apache.org/cassandra/ArchitectureSSTable

    [3].http://blog.csdn.net/jiaomeng/archive/2007/01/27/1495500.aspx

    [4].http://www.hellodba.net/2009/04/bloom_filter.html

    [5].http://labs.google.com/papers/bigtable.html原图已失效

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. HFile存储格式 (累计阅读 15,971)
  2. hbase运维 (累计阅读 14,922)
  3. hbase介绍 (累计阅读 12,366)
  4. 基于Redis构建系统的经验和教训 (累计阅读 10,522)
  5. Key-Value小数据库tmdb发布:原理和实现 (累计阅读 8,351)
  6. HBase技术介绍 (累计阅读 8,072)
  7. SQL vs NoSQL:数据库并发写入性能比拼 (累计阅读 7,999)
  8. Redis作者谈Redis应用场景 (累计阅读 7,670)
  9. HBase随机写以及随机读性能测试 (累计阅读 7,545)
  10. Web应用的缓存设计模式 (累计阅读 7,441)