Cassandra 技术选型的问题
Cassandra在国内资料少,用的也不多,大家更多抱观望态度吧。
为了扩大Cassandra队伍帮助自己采坑,决定写一篇文章,就自己对Cassandra的理解范围进行介绍。
选用Cassandra的基本原因
- 集群,集群意味着存储能力、负载能力的平行扩展,多节点提供快速故障转移,这是主要原因。
- 写入,Cassandra写入的能力还是不错,读性能正常水平,但是由于原因1,可以使用更多的设备来弥补。
- 单表海量数据的存储,Cassandra提供分区功能,类似在mysql中分表操作,减少了分表这一层逻辑,但是也带来了一些限制。
- CQL 类似 SQL,这里是和redis相比,Cassandra的数据操作更加可控,同时自动管理缓存,可以当做mysql + redis用,然而不需要写两套代码,数据可以设置生存时间,相比redis,数据的落地做的更好,更接近mysql这种关系数据库的数据保障。
- 客户端,Cassandra提供较完整的客户端,包括PHP、JAVA、PYTHON、C 等等,而且近一年来(2015)更新频繁,可以说在技术支持上提供了较好保障。
值得一提的是,Cassandra在PHP提供了异步编程模式,这使得较少涉及异步编程的PHP可以同时处理许多耗时的查询。 - 技术单一,你只需要一个Cassandra安装包,就可以完成集群架设,算是非常简单,这一点是相比HBase。
限制和坑
- Cassandra无法替代MySQL(下面有介绍),你可能只能在部分业务中使用,可以替换redis 几乎所有的功能,目前发现就是可排序的计数器还是无法实现。
- 连接过程异常缓慢,即使在没有账号密码验证的情况下可能也需要几十ms,基本无法容忍,需要有连接池、长连接的支持,如果你需要在PHP中使用Cassandra,可能需要自己实现一个中间件来避免每次请求的连接或者连接数量庞大的问题。
- 不支持跳页,也就是limit 100,100,只能limit 100 再用条件看“下一页”。
- 读取速度基本和mysql相当,别指望用Cassandra后页面变快了,不过PHP程序员可以期待一下异步编程带来的速度提升。前面提到,节点不断扩展后,整体的集群负载能力是比mysql要高的,新版本mysql7 不算在内,尚未发现有专业人士提供测试对比数据。
- 无法提供非常精确的备份还原点,Cassandra是基于镜像和增量备份做还原,只能提供有限的还原时间点。
- CQL 不是 SQL,你会遇到一些操作限制,比如排序的时候不能用主键的第一级排序 primary key (uid,pid),只能用pid排序。
- 文档以英文为主,国内有一些翻译,但是不完整,也可能是我没找对地方。许多同行已经在分享Cassandra的宝贵经验了,stackoverflow会是一个解决问题的好去处。
- 这一点要非常小心 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开发的一些问题和解决方法
- 连接特别慢,使用swoole 做中间件,保持所有的Cassandra连接,可以解决。
- timeuuid bigint map set 等数据类型在入库的时候,你需要像强类型语言一样,指定类型,这个没有办法,你可以为每张表写一个类型映射,进行自动匹配。
Cassandra 技术选型的问题的更多相关文章
- #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie
郑昀 创建于2014/10/30 最后更新于2014/10/31 一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...
- 老王讲自制RPC框架.(一.前言与技术选型)
(#)背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只 ...
- Atitit 开发2d游戏的技术选型attilax总结
Atitit 开发2d游戏的技术选型attilax总结 1.1. 跨平台跨平台:一定要使用跨平台的gui技术,目前最好的就是h5(canvas,webgl,dom) +js了..1 1.2. 游戏前后 ...
- 《2016ThoughtWorks技术雷达峰会----js爆炸下的技术选型》
JS爆炸下的技术选型 刘尚奇 ThoughtWorks, 高级咨询师 JS每6个星期出现一个新框架,那么如何进行JS的选型.以下从四个方面来分析. 1.工具 NPM for all the t ...
- 手机web站点和手机app 技术选型的困惑于思考
今年一直在关注移动端技术的发展,自己也用博客园的rss接口玩了半年,关于技术选型的困惑和大家说说 一 趋势 随着手机硬件不断的升级,外加4g牌照的发放,不出2年时间移动端web站点和手机app一定会进 ...
- atitit.技术选型方法总结为什么java就是比.net有前途
atitit.技术选型方法总结为什么java就是比.net有前途 #----按照不同的需要有不铜的法... 一般有开发效率,稳定性上的需要.. 作者 老哇的爪子 Attilax 艾龙, EMAIL: ...
- 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...
- AutoLayout技术选型和应用
前言:这篇文章是笔者在项目中对布局技术进行技术选型和应用的相关介绍,供大家参考. && [self.buttonscount] > 0) { UIButton *button = ...
- (转).net项目技术选型总结
原文作者:mcgrady 原文地址:.net项目技术选型总结 做.net开发已经几年了,也参与开发了很多大大小小的项目,所以现在希望总结出一套开发.net项目的常用技术,也为以后做项目技术选型的时候作 ...
随机推荐
- nginx 反向代理(Reverse Proxy)与耗时记录
反向代理服务器位于实际的服务器之前,他能够缓存服务器响应,加速访问,同时也启到了负载均衡服务器的效果.反向代理服务器解析客户端请求,根据负载均衡算法转发到不同的后台服务器上.用户和后台服务器之间不再有 ...
- 源码解读—Stack
Stack特性:先进后出.后进先出 java.util.Stack实现了这一数据结构. public class Stack<E> extends Vector<E>,Sta ...
- reverse list
public void reverse (){ Node end =null,p,q; p=head; //p代表当前节点,end代表翻转后p后面的,q代表翻转前p后面的 while(p!=null) ...
- mysql设置定时任务
–查看时间调度器是否开启 SHOW VARIABLES LIKE 'event_scheduler'; SELECT @@event_scheduler; –开启时间调度器 SET GLOBAL ev ...
- Configuring HugePages for Oracle on Linux (x86-64)
Introduction Configuring HugePages Force Oracle to use HugePages (USE_LARGE_PAGES) Disabling Transpa ...
- QTEmbedded VCN实现
1 在QT在第三方插件里加入VNC 进入\src\plugins\gfxdrivers\vnc,qmake -------make--------- make install 把目标文件夹gfxdri ...
- selenium简介
Selenium是一个开源的和便携式的自动化软件测试工具,用于测试Web应用程序有能力在不同的浏览器和操作系统运行.Selenium真的不是一个单一的工具,而是一套工具,帮助测试者更有效地基于Web的 ...
- 解决“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件问题
这些提示的问题完全没有必要去理会,因为一般情况下你点击本地windows调试,会报出这样问题很正常. 网上一些介绍什么要去选项卡栏勾选window连接器什么鬼,不建议用该方式,一旦你勾选那个方式虽然不 ...
- math对象和date对象
math对象的函数方法,记住Math首字母要大写 console.log(Math.abs(-5)); //取绝对值 console.log(Math.ceil(1.1)); //向上取舍 conso ...
- oracle 将查询到的数据插入表
1. 新增一个表,通过另一个表的结构和数据 create table tab1 as select * from tab2 2. 如果表存在: insert into tab1 select * fr ...