距离上次写博客已有半年之久,上一篇博客(Cassandra in Action with Twitter's Ruby Client)主要是一个关于Cassandra入门的文章,里面没有提到关于数据一致性的处理。这个博客的主要目的就是要提供一个方法来保证数据的一致性。
Cassandra是一个高性能的Key/Value存储服务器,在NoSQL社区相当的有影响力(主要还是因为师出名门,有Amazon和Facebook以及Twitter等撑腰)。我们可以把它想象成一个多级的哈希表,它不存储数据库的设计信息,也就是说它是一个schemaless的数据库。如果你喜欢使用Ruby的话,那我敢保证,当你进入到schemaless的天地后你就再也不愿回到过去。它可以强大到让你产生快感的地步,就好象在高空中自由翱翔一样,没有任何东西阻挡你实现自己的想法。当然,如果因为schemaless,你把数据整的稀巴烂,那就不要怪我,schemaless并不是designless。
好了,我满足了,废话说完了,该说正题了。当你看完Cassandra如何强大之后,通常都会注意到一个坏消息:no transactions。这简直像个晴天霹雳,没有事务支持那岂不是寸步难行了,总不能每次都靠观音菩萨保佑不会产生数据不一致吧。是的,事务对于一个数据库来说相当重要,特别是当我们有数据一致性要求的时候。商业数据库没有哪个是不支持事务的,而且厂商通常都会在这块花费大力气。但Cassandra偏偏就没有,因为它要给你另外的东西而不是事务,它想让你的读写非常快速的执行并且保证数据最终是一致的。但问题是,我爱快速的读写性能,但我也要一致的数据啊,最终一致并不能避免两个进程访问同一资源时的数据丢失,纠结啊!
来看一个简单的例子:一个整数数据,当前值是0,有两个进程同时想让它加1。这两个进程的处理方法应该是一样的,先把当前值读出来,然后加上1,然后写回去。幸运的情况下(就是我前面说的观音菩萨在保佑),两个进程的执行时间上没有overlapping,相互没有影响,那我们得到的就是2。但有时候菩萨出差中,第一个进程读出来后还没有写进去就被第二个进程给和谐了,等它写完后就等于第二个进程的数据丢失了。
要解决一致性的问题,第一个方法就是不要搞那么多的操作进程,而只由一个进程去操作。只要没人跟它抢,就不会有数据丢失的问题。针对上面的问题,我们需要做的就是增加一个队列以及第三个进程。当以前的两个进程想要做“加1”的操作的时候,它们往一个队列里面插入新的记录(在Cassandra里面写是永远不会失败的)以告知第三个进程它们想干嘛。第三个进程相当于是一个代理,专门检查队列里的指令并执行,它负责真正的“加1”操作。
你肯定在想,就这么个简单的操作就要搞这么多名堂,复杂一点的事情可怎么得了?是的,复杂一点的事情就不能这么搞了。更实际的方法是用锁(这其实就是商业数据库的事务处理底层机制),把两个进程的执行时间隔开来。不管是这里的锁还是前面的增加第三个进程,说到底都是需要一个统一的仲裁机构,它是全局唯一的,所以它那里的东西不会打架。提供锁的服务器就是这个全局唯一的仲裁机构,它告诉那两个进程何时可以去修改数据,这样就可以把执行时间分割开来而不至于产生overlapping。呵呵,我们找到观音了!
好消息来了,已经有人做了这方面的工作了哦,大家有免费的锁服务器用诶。如果你习惯Java的话,我们有Cages(http://www.apacheserver.net/Locking-and-transactions-over-Cassandra-using-Cages-i28826.htm)。但不幸的是,我不会java,以前用java写过一些从来没有人真正用过的项目,但没有做过真正的商业开发。而又幸运的事,我找到了一个Ruby的锁服务器:Officer (https://github.com/chadrem/officer)。它是从另外一个开源项目elock(https://github.com/dustin/elock)那里取得灵感后开发出来的。【人生大起大落的太快,实在是太刺激了】
好了,我不罗嗦了。更多的信息,去相关的网站看吧。下一篇博客我准备说一说Cassandra里的schemaless建模技术,应该就在不久的将来。。。SEE U!
分享到:
相关推荐
5. **分布式数据库与分片策略**:像Cassandra和MongoDB这样的分布式数据库支持跨节点的数据复制和分片,以实现高可用性和一致性。分片策略需要考虑数据分布和查询模式,以确保一致性。 6. **版本控制与乐观锁**:...
Cassandra通过一致性哈希算法将数据分布在一个节点环上,以实现数据的均匀分布和容错性。此外,Cassandra还采用了Gossip协议进行节点间的通信和状态同步,以保持集群的健康运行。 在选择NoSQL解决方案时,关键在于...
总的来说,Cassandra是一个适用于大数据、实时事务处理和高并发场景的数据库解决方案,其分布式架构和灵活的数据模型使其成为处理海量数据的理想选择。随着版本的迭代,Cassandra持续优化性能,增强功能,保持在...
其中,UGO用于数据库结构迁移,DRS则支持数据迁移和实时变化数据捕捉,确保数据一致性。此外,GaussDB还具备强大的实时性能诊断和智能优化功能,助力企业提升数据库运行效率。 面对政企和金融客户更为复杂的业务...
6. **分布式事务的挑战与解决方案**:包括网络延迟、单点故障、数据一致性等问题,常见的解决方案有故障恢复机制、超时重试策略、幂等性设计等。 7. **NoSQL数据库的分布式事务**:NoSQL数据库通常不支持ACID(原子...
Cassandra的设计目标之一就是提供一个能够应对海量数据和高并发请求的解决方案,它具有以下几个显著特点: - **列表数据结构**:Cassandra支持多维度的数据结构,可以将超级列添加到五维的分布式Key-Value存储系统...
它支持强一致性、最终一致性和一致性水平的可配置,让开发者可以根据业务需求选择合适的事务模型。此外,Cassandra还提供了数据分区(Partitioning)和复制(Replication)策略,以确保数据的分布和冗余。 在...
6. **分布式事务的NoSQL解决方案**:如CAP理论中的CP(Consistency与Partition Tolerance)取舍,很多NoSQL数据库如MongoDB、Cassandra提供了最终一致性,它们在分布式事务上有不同的处理方式。 7. **分布式事务的...
设计者必须在各种关键属性之间进行权衡,其中包括操作一致性、事务一致性和系统可用性。 操作一致性是指在分布式环境中,当用户执行一系列操作后,系统呈现给用户的最终状态应与在单机数据库中的预期结果一致。这...
事务处理是指在数据库管理系统中执行的一系列操作,这些操作通常涉及数据的增、删、改、查,确保数据的一致性和完整性。而云计算则是一种分布式计算模式,通过互联网提供按需计算服务,包括服务器、存储、数据库、...
它的设计灵感来源于Google的Bigtable,旨在提供高可用性、线性可扩展性和强一致性的数据存储解决方案。在互联网时代,随着大数据的爆发,Cassandra因其出色的性能和容错能力而备受关注。 ### 1. Cassandra目录结构 ...
6. 数据治理与安全性:海量数据的管理包括元数据管理、数据质量控制、数据生命周期管理等,确保数据的准确性和一致性。同时,数据安全是不容忽视的一环,包括数据加密、访问控制、审计日志等措施,保护数据免受非法...
2. **一致性哈希**:Cassandra使用一致性哈希来分区数据,确保数据在节点间的均匀分布。 3. **Gossip协议**:用于节点间的心跳通信和状态同步,确保集群的健康运行。 4. **读写流程**:Cassandra采用主-从复制模式,...
然后,采用合适的数据建模方法(如范式理论或领域驱动设计),将数据结构化,确保数据的一致性和完整性。此外,还需考虑数据的访问模式,设计合理的索引策略,以便在分布式环境中高效检索。 三、实现横平 分布式...
包括多版本并发控制(MVCC)、分布式事务、Paxos算法等,都是NoSQL数据库为了在分布式环境下保证数据一致性所采用的技术手段。 2.2 数据存储模型 NoSQL数据库支持多种数据模型,以适应不同的应用场景: - **键值...
SequoiaDB、Cassandra和MongoDB都是流行的NoSQL数据库解决方案,它们各自在性能、架构和适用场景上有着不同的特点。SequoiaDB是一个分布式文档数据库,拥有水平可扩展、高可用性、强一致性和高性能等特性。Cassandra...
在互联网环境下,随着数据量的爆炸式增长和业务需求的复杂化,传统的集中式数据处理系统逐渐显示出性能瓶颈,无法满足快速...随着技术的不断进步和创新,我们有望看到更加高效、智能和可靠的分布式事务处理解决方案。
《从Paxos到Zookeeper分布式一致性原理与实践》是一本关于分布式系统中一致性问题和解决方案的专业书籍。Paxos算法和Zookeeper系统是分布式系统领域解决一致性的两大核心技术。以下是对该书内容的知识点的详细阐述:...
核心功能包括数据一致性、事务支持以及对数据丢失的零容忍度。在这个时期,开源数据库如MySQL和PostgreSQL是技术的明星,它们支持ACID原则,拥有丰富的索引分析功能,能够处理非结构化存储,并使用MVCC(多版本并发...