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

Cassandra一致性问题及客户端解决方案

阅读更多

          数据一致性是分布式原理CAP的一个要素,在以往使用Mysql或Oracle时,几乎不用为一致性操心,而现在用到了Cassandra(目前使用了2.0.0版本),它保证的是数据的最终一致,导致在实际使用过程中出现了很多问题。

 

       很多问题的根源,就是在更新一条记录,如果马上查询,结果竟然还是旧数据,或者新插入条数据,在查询会发现结果为空。这就是最终一致性的特点,而解决这个问题,即实现强一致性,需要实现以下条件:(nodes_written + nodes_read) > replication_factor 。注:replication_factor 表示数据的复制份数,nodes_written 表示一次写需要同步的节点数,nodes_read表示一次读需要读取的节点数。

这都是在Datastax网站提及的。大笑

 

       上面是理论基础,而在具体测试时,还是出了问题,3台服务器,读2份,写2分(2+2>3),按说应该可以实现强一致。

 

       在使用Hector测试时,无论如何修改读写份数,都无法实现强一致,放弃。惊讶

 

       后又改用Astyanax,使用的连接池策略为轮询(ConnectionPoolType.ROUND_ROBIN),发现了一个奇怪的规律:每三条记录只能出现一条更新成功的;然后根据这个规律,修改了代码,每个插入操作循环三次,再取出来后结果就是一致的。


       然后使用Cassandra自带的cql客户端,多次的修改同一记录,并且查询,发现结果是一致的。
通过查看日志,发现两种客户端请求产生的后台日志是相同的,但通过Astyanax客户端的请求会轮流发送到三个机器上,而Cassandra的cql客户端的请求只发送的一台机器上。于是想到jAstyanax是否有不同的请求策略,发现其提供了三种策略(TOKEN_AWARE,ROUND_ROBIN和BAG ),测试BAG方式,结果所有的同一主键的请求被发送到一台机器,查询结果是一致的,但连续更新大概3万次后,有出现了不一致,需要再研究一下,不过却是很大的改善了一致性。

      目前正在查看Cassandra的源码实现,努力找出问题根源。

0
0
分享到:
评论
1 楼 yunnick 2014-03-12  
写了一篇总结文章,竟然没了。

以上问题的根源就是时间戳不一致造成的。

所以必须确认时间戳,误差控制在毫秒内

相关推荐

    DevCenter cassandra客户端

    DevCenter cassandra客户端 DevCenter cassandra客户端 DevCenter cassandra客户端

    分布式数据库Cassandra 一致性详解.zip

    2.Cassandra ⼀一致性实现 2.1 CAS 2.2 Quorum读写 2.3 不不⼀一致产⽣生原因 2.4 Hinted handoff 2.5 Read repair 2.6 Manual repair 3.Cassandra应⽤用场景 4.总结 视频是mp4格式,配套文档下载地址...

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

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

    Python-一个现代功能丰富和高度可调优的Cassandra和DataStax的Python客户端库

    一个现代、功能丰富和高度可调优的Cassandra 和DataStax的Python客户端库

    cassandra cql 3.1

    This document describes CQL for Cassandra 2.1 and 2.0.x.

    Cassandra的PHP客户端库phpcassa.zip

    phpcassa是为Apache Cassandra的一个PHP客户端库。 与Cassandra的0.7,0.8,1.0,和1.1兼容 可选C扩展以提高性能 phpcassa兼容PHP5.3 示例代码: $pool = new ConnectionPool('Keyspace1', array('localhost'))...

    cassandra 实战

    cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战...

    Laravel开发-laravel-cassandra

    Laravel开发-laravel-cassandra Laravel的Cassandra客户端库。将Cassandra集成到Laravel应用程序中。

    cassandra-conn-monitor:一个监视Cassandra群集连接的简单客户端

    一个简单的客户端,可以在实际应用程序之外监视Cassandra群集的连接性和实验配置组合。 它在客户端应用程序进行故障排除期间被使用,在该客户端应用程序中群集连接没有明显的原因被关闭。 gradle shadowJar java -...

    nosql cassandra学习教程

    真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。 多数据中心识别 :你可以调整你的节点布局来避免某一个...

    elixir-cassandra:Apache Cassandra的Elixir客户端

    elixir-cassandra:Apache Cassandra的Elixir客户端

    操作cassandra的UI工具

    还在为操作cassandara数据库没有界面而烦恼吗?这个小工具就是最后的选择,必须先装jdk哦

    Cassandra(apache-cassandra-4.0.1-bin.tar.gz)

    Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。 Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其...

    Cassandra在Windows上安装及使用方法

    Cassandra在Windows上安装及使用方法

    CassandraNT:Cassandra Nodetool 解决方案

    Cassandra 节点工具扩展CassandraNodetool 扩展是一种以最少的配置从 Cassandra 数据库收集指标的解决方案。 该解决方案利用 nodetool 工具从 Cassandra 收集指标。 以下是当前收集的指标:指标小路类别名称指标类型...

    Cassandra

    The rising popularity of Apache Cassandra rests on its ability to handle very large data sets that include hundreds of terabytes -- and that's why this distributed database has been chosen by ...

    cassandra, Docker的官方图像打包.zip

    cassandra, Docker的官方图像打包 关于这个 repo这是 Docker 官方映像插件的Git repo,例如 。 有关如何使用这里映像的完整自述文件以及有关如何使用和发布问题的信息,请参见页 。完整自述文件是在 docker库/文档中...

    Cassandra DataStax原理及安装

    本文档详细介绍了Cassandra,DataStax的原理,以及在各种环境下的安装方法。

    Cassandra(apache-cassandra-3.11.11-bin.tar.gz)

    Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。 Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其...

    lua-resty-cassandra, 使用CQL二进制协议的纯Lua客户端.zip

    lua-resty-cassandra, 使用CQL二进制协议的纯Lua客户端 这里 repo 为正在积极维护。 我强烈建议你尝试 。 lua-resty-cassandra 使用CQL二进制协议v2的纯Lua客户端。如果在 Nginx/openresty中使用,它是 100%个非阻塞...

Global site tag (gtag.js) - Google Analytics