`
longzhun
  • 浏览: 371867 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cassandra的写过程

 
阅读更多

Cassandra的写操作包含几个过程。从开始实时写日志到最后进行压缩。

1、把数据写入commit log
2、数据写入内存表memtable
3、从memtable中刷新
4、存储到磁盘中的sstables里
5、压缩

写日志和memtable存储

当有一个写入发生,cassandra会把数据存到内存里叫memtable的数据结构里,也会写到磁盘的commitlog里,提供持久化存储。commitlog接受每个请求,并且持久化保存,甚至是断电。memtable是一种回写cache,cassandra通过key可以在memtbale里查询数据。memtable的大小是有限制的,当到达一个限制就会被刷新。

从memtable刷新数据。

当memtable的内存超过了配置的阈值,memtable里的数据包括索引,就会进入一个刷新到磁盘的队列里。你可以通过修改cassandra.yaml里的 memtable_heap_space_in_mb配置项来控制这个队列的大小。当要刷新的数据超过了队列大小,cassandra就会阻止写入直到下一个刷新成功。你可以使用nodetool flush 手动触发一个刷新,通常在重启节点之前,建议刷新一次memtable,这样可以减少重放commitlog的时间。为了刷新数据cassandra会吧memetables根据token排序,然后顺序写到磁盘上。

磁盘上数据存储到sstables中

对于在commitlog里的数据,当在memtable里的对应的数据被刷新到一个sstable中之后会被清除。


Memtables和SStables都是分表存储的,SStables是不可以改变的,当从memtbale中刷新到磁盘上后就不会再写入。因此一个分区可以通常会保存到多个sstable文件中。对于每个sstable,cassandra会创建如下结构化数据:

1、分区key索引:一个分区key的列表和对应的在data文件中的起始位置。
2、分区key汇总(在内存里):一个分区key索引的抽样
3、布隆过滤器

压缩

周期性的压缩是cassandra作为一个健康数据库所必须的,因为cassandra不会把数据插入或者更新到具体的位置。当插入或者更新发生了,并不会去覆盖原来的数据,而是重新写入一个新的时间戳版本的数据到另外一个sstable中。cassandra管理在磁盘上不断累积的sstable,就是使用压缩。

cassandra也不会去实际删除数据,因为sstable是不可以修改的。而是用墓碑的方式标记数据被删除了,墓碑存在一个可配置的周期,是表的一个参数 gc_grace_seconds。

在压缩的过程中,会有一个磁盘使用空间以及IO的临时飙升,因为老的和新的sstable会并存,这个图描述了压缩的过程:


压缩会根据分区key合并多个sstable中的数据,选择具有最新时间戳的进行存储。Cassandra可以高性能的合并数据,而不会产生随机IO,因为在sstable里的row都是根据分区key排序存储的。在删除了墓碑和要删除的数据,列和行数据后,压缩的过程会把这些sstable压缩成一个文件。老的sstable文件会在堆积到该文件上的查询请求结束后尽快的删除。这样老的sstable占用的磁盘空间又可以重复使用了。

cassandra2.1改进了压缩后的读性能,通过一种增量式的替换压缩过的sstables。而不是等到整个压缩完才去删除老的sstable。cassandra可以直接从新的sstable中读取,甚至在它完成写入之前。

当数据写到新的sstable,读请求就会访问新的sstable,在老的sstable中相应的数据不会再被访问,并且从系统的page cache中剔除掉。因此当缓存新的sstable的增量过程开始的时候,读取就不会从老的读,相应的cache也会消失。因此可以预见cassandra提供了一种高的性能甚至是在高负载下。

 

 

  • 大小: 35.1 KB
  • 大小: 51.8 KB
分享到:
评论

相关推荐

    Learning Apache Cassandra 2015

    它简化了与Cassandra的交互过程,使用户能够更容易地执行常见的数据库操作,如创建表、插入数据、查询数据等。 - **创建键空间**:键空间是Cassandra中的命名空间,类似于RDBMS中的数据库。 - **选择键空间**:选择...

    ycsb cassandra 压力测试工具

    - 输出日志:YCSB 在执行过程中会输出详细的操作时间、吞吐量、延迟等指标,这些数据可用于性能分析。 - 数据可视化:可以使用第三方工具(如 Grafana、Prometheus)或者自定义脚本来收集和可视化测试结果,便于...

    cassandra权威指南(中文)

    - **最佳实践**:分享Cassandra使用过程中的经验和教训,帮助新用户快速上手。 综上所述,《Cassandra权威指南(中文)》涵盖了Cassandra的各个方面,不仅深入浅出地介绍了其基础知识和技术细节,还提供了丰富的...

    MariaDB Cassandra interoperability Cassandra Storage Engine in MariaDB

    它不仅简化了数据访问过程,还提高了数据处理的灵活性。然而,正确理解和应用数据映射策略对于充分发挥其潜力至关重要。通过持续的测试和优化,Cassandra存储引擎可以成为连接MariaDB和Cassandra世界的强大工具。

    Cassandra技术详解 操作与测试报告

    - Cassandra的设计使其能够非常容易地进行水平扩展,只需添加更多的硬件资源即可,无需复杂的迁移过程。 3. **多数据中心支持** - Cassandra的多数据中心功能为数据的高可用性和容灾提供了强大的支持,确保数据的...

    cassandra介绍

    1. **灵活的 Schema**:用户可以在不事先定义的情况下添加或删除字段,这种灵活性极大地简化了数据管理的过程。 2. **支持 Range 查询**:能够对 Key 进行范围查询,这一特性对于数据分析和检索任务非常有用。 3. **...

    存储数据(cassandra)

    写操作会同步到所有副本,保证数据的一致性。读操作可以从任何副本读取,通过TTL(Time To Live)机制控制数据过期。 ### 4. 环境配置与优化 Cassandra的性能很大程度上取决于配置。内存分配、磁盘I/O、网络带宽等...

    cassandra教程

    这种扩展方式简化了管理和维护过程。 ### 多数据中心识别 Cassandra的设计考虑了多数据中心的部署,可以配置为跨多个地理位置的节点布局。这样,即使某个数据中心出现问题,备用数据中心也能保持服务的连续性,确保...

    php使用cassandra用到的phpcassa-0.1

    7. **错误处理和调试**:在开发过程中,了解如何处理phpcassa可能出现的错误和异常,以及如何开启日志以进行问题排查。 8. **性能优化**:理解Cassandra的索引、缓存和批处理等特性,有助于提高phpcassa的性能。 9. ...

    Expert Apache Cassandra Administration.pdf

    优化Cassandra数据库是一个持续的过程,涉及到资源分配、数据建模和查询性能。资源优化包括监控和调整JVM堆大小、垃圾回收策略和线程池设置。数据建模则需要设计适应Cassandra特点的数据模型,比如宽列存储设计,...

    Cassandra 监控脚本

    Cassandra 是一个分布式NoSQL数据库系统,用于处理大规模数据分布式存储和检索。在这个"**Cassandra 监控脚本**"中,我们关注的是如何在Linux环境下通过Python和shell脚本来管理和维护Cassandra集群的健康状况。以下...

    cassandra源码分析

    4. 反熵(Anti-Entropy):Cassandra通过定期的反熵过程,确保所有副本之间的数据同步,保持数据的一致性。 二、数据模型与存储 1. 键值对:Cassandra的数据模型基于列族(Column Family),每个列族是一组键值对...

    apache-cassandra-2.2.16-bin.tar.gz

    5. ** Tombstones**:Cassandra使用Tombstones来标记已删除的数据,以便在后台垃圾收集过程中清理。 6. **读写性能**:Cassandra优化了读写性能,特别是在大型数据集上,通过数据分区和数据复制策略,可以实现高...

    cassandra技术分享

    在部署和使用Cassandra的过程中,数据建模和性能优化是不可忽视的两个方面。数据建模需要根据实际应用的需求来设计合适的列族和超级列,以优化存储和读取效率。性能优化则涉及调整副本策略、读写策略等参数,以及...

    apache-cassandra-1.2.5

    1.2.5可能优化了Memtable到SSTable的flush过程,减少了磁盘I/O,提高了写入速度。 6. **Compaction策略**:Cassandra的Compaction机制用于合并SSTables,减少磁盘空间的使用和提高读取效率。1.2.5可能对Compaction...

    Dynamo-and-Cassandra-paper

    Dynamo依赖于多数派投票策略,而Cassandra则允许用户自定义副本因子和读写策略,包括最近的写优先(Read Repair)和反熵(Anti-Entropy)过程。 在性能方面,两者都通过并行处理和批量操作来提高吞吐量。Dynamo 的...

    2019云栖大会Cassandra一致性详解-201909.pdf

    然而,Cassandra理解CAP并不意味着非黑即白的选择,而是一个连续的权衡过程。Cassandra大多数情况下可以保证强一致性,但在极端网络条件下,为了保持服务的可用性,可能会牺牲一致性。 1. **Cassandra优势** - **...

    深入研究Cassandra后重读Dynamo

    - **案例分析**:Twitter、Flowdock等公司在使用过程中遇到了一系列问题,包括但不限于数据一致性问题、性能瓶颈等。这些问题反映了Dynamo架构在实际应用场景中的局限性。 **2. 解决方案与改进** 针对Dynamo架构中...

    cassandra 2.2官方文档

    详细解释了数据是如何写入的,维护方式,更新和删除的过程,以及索引的存储和更新机制。此外,文档还讨论了数据一致性的问题,包括一致读写操作的处理、与关系型数据库事务的区别、如何实现轻量级事务以及一致性级别...

Global site tag (gtag.js) - Google Analytics