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项目的常用技术,也为以后做项目技术选型的时候作 ...
随机推荐
- 一机运行多个resin的配置
对于java应用服务器,常用的一般为tomcat.jboss.resin. 一. 概述 经常会有这种情况: 1.一台服务器上,跑多个java应用 2.网站负载高,需要采用负载均衡(轮询)的方式来解决 ...
- sql如何获取一个时间段内的月份
),) from master..spt_values where type='P' and dateadd(month,number,'2010-01-01')<='2010-09-01' / ...
- [ZOJ 1002] Fire Net (简单地图搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002 题目大意: 给你一个n*n的地图,地图上的空白部分可以放棋 ...
- C# 泛型List用法
C# List Examples by Sam Allen - Updated September 6, 2009 Problem. You have questions about the List ...
- Android WebView Long Press长按保存图片到手机
<span style="font-size:18px;">首先要先注册长按监听菜单 private String imgurl = ""; /** ...
- 前端测试框架 jasmine 的使用
最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前.通过对比我们选择了 Karma + jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 K ...
- GUI创建各常用控件(二)
继续接着上一篇! 在我看来有一点需要申明:由于是GUI的相关知识,所以我只是在复习中粗略的总结而已,因此参考价值可能有限,更多的是当作自己学习的一个记录以及便于自己查阅. 好啦!干货继续: 1.类似于 ...
- Orchard官方文档翻译(六) 建立你的第一个Orchartd站点
让我们开始 该主题内容已在Orchard1.8Release版本下测试通过. 这里通过向导式的教程来告诉大家Orchard的功能如何使用.如果你是第一次使用Orchard,该文档就是为你而准备的! O ...
- 'UIShell.OSGi.MvcWebExtension.BundleRuntimeControllerFactory' did not return a controller for the name 'Home'.
在使用osgi.net 框架的时候,有时会遇到这样的错误: 解决办法: 1. 检查项目文件夹下的 log 日志文件,因 osgi.net 在运行时(包括异常和操作)都会在项目的目录下生成 日志文件,并 ...
- 查询数据库中表或视图或存储过程的数量 sql 语句
如果一个数据库中表的数量较多的话,那么在统计数据库中表的数量或视图或存储过程的数量时,如果还有一个一个去数,那就太麻烦了,其实可以通过 sql 语句来查询的,sql 语句的查询方法如下: sql se ...