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. IE,Chrome滚动条样式CSS

    <style type="text/css"> *{ scrollbar-face-color:#F3F3F3; /*面子*/ scrollbar-arrow-colo ...

  2. 屏幕分辨率与FPS

    屏幕分辨率 刷新率分为垂直刷新率和水平刷新率,一般提到的刷新率通常指垂直刷新率. 垂直刷新率表示屏幕的图象每秒钟重绘多少次,也就是每秒钟屏幕刷新的次数,以Hz(赫兹)为单位. 刷新率越高越好,图象就越 ...

  3. (medium)LeetCode 238.Product of Array Except Self

    Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...

  4. Asp.net树形递归算法

    using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq ...

  5. requestDisallowInterceptTouchEvent

    ViewPager来实现左右滑动切换tab,如果tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比如想滑动tab项中的可水平滑动的控件,却导致tab切换. 因为Android事件机制是从父 ...

  6. (转)C# WinForm获取当前路径汇总

    Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏本文来源 :http://www.cnblogs.com/greatverve/archive/2011/12/15/winform- ...

  7. Unity小厨房之-----背后视角摄像机

    相信每一个接触过Unity的人,应该都认识Unity引擎自带的那个水管工,也一定知道那个小人模型上挂着3个脚本控制着小人的一切,今天我就来说一下关于Unity背后视角摄像机的实现,当然方法并不唯一,这 ...

  8. 转载:Windows Phone 8.1 投影我的屏幕使用教程

    原文地址:http://livesino.net/archives/6851.live 更新了软件的下载地址. Windows Phone 8.1 新功能投影我的屏幕(Project My Scree ...

  9. android View 自动 GONE 问题

    首先说一下 view visibility VISIBLE.INVISIBLE.GONE的区别: 可见(visible) XML文件:android:visibility="visible& ...

  10. 使用postman玩转接口测试

    (一)前言: 之前搞自动化接口测试,由于接口的特性,要验证接口返回xml中的数据,所以没找到合适的轮子,就自己用requests造了个轮子,用着也还行,不过就是case管理有些麻烦,近几天又回头看了看 ...