Cassandra在国内资料少,用的也不多,大家更多抱观望态度吧。
为了扩大Cassandra队伍帮助自己采坑,决定写一篇文章,就自己对Cassandra的理解范围进行介绍。

选用Cassandra的基本原因

  1. 集群,集群意味着存储能力、负载能力的平行扩展,多节点提供快速故障转移,这是主要原因。
  2. 写入,Cassandra写入的能力还是不错,读性能正常水平,但是由于原因1,可以使用更多的设备来弥补。
  3. 单表海量数据的存储,Cassandra提供分区功能,类似在mysql中分表操作,减少了分表这一层逻辑,但是也带来了一些限制。
  4. CQL 类似 SQL,这里是和redis相比,Cassandra的数据操作更加可控,同时自动管理缓存,可以当做mysql + redis用,然而不需要写两套代码,数据可以设置生存时间,相比redis,数据的落地做的更好,更接近mysql这种关系数据库的数据保障。
  5. 客户端,Cassandra提供较完整的客户端,包括PHP、JAVA、PYTHON、C 等等,而且近一年来(2015)更新频繁,可以说在技术支持上提供了较好保障。
    值得一提的是,Cassandra在PHP提供了异步编程模式,这使得较少涉及异步编程的PHP可以同时处理许多耗时的查询。
  6. 技术单一,你只需要一个Cassandra安装包,就可以完成集群架设,算是非常简单,这一点是相比HBase。

限制和坑

  1. Cassandra无法替代MySQL(下面有介绍),你可能只能在部分业务中使用,可以替换redis 几乎所有的功能,目前发现就是可排序的计数器还是无法实现。
  2. 连接过程异常缓慢,即使在没有账号密码验证的情况下可能也需要几十ms,基本无法容忍,需要有连接池、长连接的支持,如果你需要在PHP中使用Cassandra,可能需要自己实现一个中间件来避免每次请求的连接或者连接数量庞大的问题。
  3. 不支持跳页,也就是limit 100,100,只能limit 100 再用条件看“下一页”。
  4. 读取速度基本和mysql相当,别指望用Cassandra后页面变快了,不过PHP程序员可以期待一下异步编程带来的速度提升。前面提到,节点不断扩展后,整体的集群负载能力是比mysql要高的,新版本mysql7 不算在内,尚未发现有专业人士提供测试对比数据。
  5. 无法提供非常精确的备份还原点,Cassandra是基于镜像和增量备份做还原,只能提供有限的还原时间点。
  6. CQL 不是 SQL,你会遇到一些操作限制,比如排序的时候不能用主键的第一级排序 primary key (uid,pid),只能用pid排序。
  7. 文档以英文为主,国内有一些翻译,但是不完整,也可能是我没找对地方。许多同行已经在分享Cassandra的宝贵经验了,stackoverflow会是一个解决问题的好去处。
  8. 这一点要非常小心 Cassandra保证最终一致性,你会遇到一些并发导致数据短时不一致问题,在计数器的使用的时候,这个问题非常明显,比如你要将计数器清0,但是可能变成负数,因为有2个进程可能并发请求。这一点可以看另一篇专门介绍计数器的文章。http://www.cnblogs.com/didda/p/4789013.html

对比redis

Cassandra 在操作速度上还是和redis有差距,但是它提供更复杂的数据结构和并发的操作方式,比如你可以给一行数据某些字段加上过期时间,某些字段使用Map结构,另外一些字段像mysql一样保存text、int、blob数据。这一切都可以在同一个table实现。而在使用redis的时候,你需要更细的规划和管理所有的key,避免有些key在redis中,其他人不知道~~。另外通过合并多种数据类型操作,Cassandra在操作次数上可以比redis减少较多。最后就是你不需要总是写一个逻辑:
如果一个数据在redis中,就读redis 返回
否则读取db,写入redis,返回

很眼熟吧,Cassandra自己做完这个事了。

PHP开发的一些问题和解决方法

  1. 连接特别慢,使用swoole 做中间件,保持所有的Cassandra连接,可以解决。
  2. timeuuid bigint map set 等数据类型在入库的时候,你需要像强类型语言一样,指定类型,这个没有办法,你可以为每张表写一个类型映射,进行自动匹配。

Cassandra 技术选型的问题的更多相关文章

  1. #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

    郑昀 创建于2014/10/30 最后更新于2014/10/31   一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...

  2. 老王讲自制RPC框架.(一.前言与技术选型)

    (#)背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只 ...

  3. Atitit 开发2d游戏的技术选型attilax总结

    Atitit 开发2d游戏的技术选型attilax总结 1.1. 跨平台跨平台:一定要使用跨平台的gui技术,目前最好的就是h5(canvas,webgl,dom) +js了..1 1.2. 游戏前后 ...

  4. 《2016ThoughtWorks技术雷达峰会----js爆炸下的技术选型》

    JS爆炸下的技术选型  刘尚奇    ThoughtWorks, 高级咨询师 JS每6个星期出现一个新框架,那么如何进行JS的选型.以下从四个方面来分析. 1.工具 NPM for all the t ...

  5. 手机web站点和手机app 技术选型的困惑于思考

    今年一直在关注移动端技术的发展,自己也用博客园的rss接口玩了半年,关于技术选型的困惑和大家说说 一 趋势 随着手机硬件不断的升级,外加4g牌照的发放,不出2年时间移动端web站点和手机app一定会进 ...

  6. atitit.技术选型方法总结为什么java就是比.net有前途

    atitit.技术选型方法总结为什么java就是比.net有前途 #----按照不同的需要有不铜的法... 一般有开发效率,稳定性上的需要.. 作者 老哇的爪子 Attilax 艾龙,  EMAIL: ...

  7. 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ

    消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...

  8. AutoLayout技术选型和应用

    前言:这篇文章是笔者在项目中对布局技术进行技术选型和应用的相关介绍,供大家参考. && [self.buttonscount] > 0) { UIButton *button = ...

  9. (转).net项目技术选型总结

    原文作者:mcgrady 原文地址:.net项目技术选型总结 做.net开发已经几年了,也参与开发了很多大大小小的项目,所以现在希望总结出一套开发.net项目的常用技术,也为以后做项目技术选型的时候作 ...

随机推荐

  1. [Flex] Accordion系列-Header的运用

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  2. 荣耀6 Plus 的屏幕大小pt计算方法

    使用 gomobile 检测 华为荣耀 6 Plus 的屏幕大小为:  1080*1776 px ;   162pt*266.40pt ;  每pt像素个数:6.666665个. 而实际的数据是: 主 ...

  3. Regex 例

    密码复杂度:数字英文符号Regex r = new Regex("^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])|(?=.*[A-Z])(?=.*[a-z])(? ...

  4. [SQL]SQL语言入门级教材_SQL功能与特性(一)

    SQL功能与特性 其实,在前面的文章中,已经提及SQL命令的一些基本功能.然而,通过 SQL命令,程序设计师或数据库管理员(DBA)可以: (一)建立数据库的表格.(包括设置表格所可以使用之空间) ( ...

  5. cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法

    // // myttf.h// // Created by 王天宇 on 14-6-12. // // #ifndef ____SLG__myttf__ #define ____SLG__myttf_ ...

  6. (转)c# math 计算两点之间的角度公式

    计算两点之间的角度公式是: 假设点一(X1,Y1),点二(X2,Y2) double angleOfLine = Math.Atan2((Y2 - Y1), (X2 - X2)) * 180 / Ma ...

  7. sqlite报错OutOfMemory

    如 java.sql.SQLException: out of memory at org.sqlite.DB.throwex(DB.java:252) at org.sqlite.NestedDB. ...

  8. SQL执行的原理以及一些常见的关键字

    sql语句在面试里面问道的问题: sql的解析的顺序 1.where里面的条件是从右向左扫描解析 2.from里面的大表在前,小表在后,解析的顺序是从右向左解析. 3.left/right/inner ...

  9. sizeof usage & big / little endian

    http://blog.csdn.net/w57w57w57/article/details/6626840 http://people.cs.umass.edu/~verts/cs32/endian ...

  10. 将 node.js 的数据保存到 mongo 数据库中

    Mongo 数据库 安装 首先到 Mongo 的官方网站下载安装程序:http://www.mongodb.org/,我下载的文件名为:mongodb-win32-x86_64-2008plus-2. ...