Cassandra NOSQL 数据库

Cassandra或许不会因为是NoSQL而得到关注,但是它在完成某些特定工作上,有迷人的魅力,这Netflix和Instagram两家公司一定知道。

过去的这些年,NoSQL的参与者,例如MongoDB已经得到了快速发展,受到了非常多的关注,但是 Apache Cassandra的光环褪去,作为创造了Cassandra的Facebook已经放弃了它,Cassandra的社区也好像过时了快。但
是Cassandra的命运迎来的转机,Netflix近来决心把他们自己的数据中心的oracle改成Cassandra Amazon云。不久
以后,Facebook也再次开始使用Cassandra,而Twitter和WebEx都不同程度的使用着Cassandra.

Cassandra的一个大问题在于它太个性,好像不好把它进行分类,虽然类似HBase,它是一个Column-family数据库,但是它却有很大的独得性。它跟文档NoSQL数据库也是不同的类别例如MongoDB或Couchbase,或key-value-pair数据库DynamoDB,Redis,Riak,等等都不一样,它自成一类。

什么是cloumn-family数据库?

一个column-family数据库它按行关键字来存储数据,它非常类似一张表,跟人们熟悉的关系数据库的表很容易混淆,尤其是自从google著名的column-family应用被称为BigTable以后,人们更容易把column的存储结构与关系数据库下的表相混淆了,但是一定要注意此表非彼表。

首先,他们基本上缺少架构schema,架构可以让你很容易的添加你想添加的列(但是你需要考虑存储优化,数据分布等问题),在Cassandra里,表的关键字不紧紧围了方便查找,它可以允许系统有效的在集群上对数据分片,看下面标准的column family结构吧,它看起来非常类似JSON.


ColumnFamilyName {

rowkey1 = {column1:"value1", column2:"value2"},

rowkey2 = {column1:"value2.1", column2:"value2.2", column3:"value2.3"},

rowkey3 = {column2:"value3.2", column3:"value3.3"},

rowkey4 = {column1:"value4.1", column3:"value4.3"}

}


上面是标准的column family数据库数据存储结构,看起来有一定的局限性,但是作为补充,它还包括一个超级列的概念,类似下面的结构:


SuperColumnFamily {

ColumnFamily1 {

cf1rowkey1 = {column1:"value1", column2:"value2"},

cf1rowkey2 = {column1:"value2.1", column2:"value2.2", column3:"value2.3"},

cf1rowkey3 = {column2:"value3.2", column3:"value3.3"},

cf1rowkey4 = {column1:"value4.1", column3:"value4.3"}

},

ColumnFamily2 {

cf2rowkey1 = {column1:"value1", column2:"value2"},

cf2rowkey2 = {column1:"value2.1", column2:"value2.2", column3:"value2.3"},

cf2rowkey3 = {column2:"value3.2", column3:"value3.3"},

cf2rowkey4 = {column1:"value4.1", column3:"value4.3"}

}

}



另外你还可以找到另外几种结构,例如composite columns和其他类型的列,包括静态和动态列等等。还有些特殊的列类型包括计数列,时间戳列等。


什么情况下使用Cassandra?

一,时间类型的数据

时间类型的数据包括任何温度传感器,工作日志,或股票价格数据等,也包括博客数据,电影片段数据等等,这些数据被证明如果使用文档数据库例如MongoDB会导致失败。

二,产品目录

三,信息过滤系统的子系统信息推荐系统-Recommendations

四,诈 骗与垃 圾信息侦 听系统

五,后端的大数据存储系统

应该说后台数据库存储系统,用Cassandra的地方不是太多,主要是应用它的缓存功能全局网数据复制
的能力,如果你需要异地备份双活数据库的话,你可以使用下Cassandra.

Cassandra与Hbase

Cassandra有自己的优点和缺点,正如Hbase一样,它们都有各自的使用场合两者都在Hadoop生态下,Cassandra用来对读写进行高复合工作,而对毫秒级的数据一致性不是太擅长,而HBase则可以弥补这些,从更大的范围讲,Cassandra适合业务系统,而HBase则更多的用在数据仓库和事务场景的系统上。

说说事务......


开发人员经常困惑什么时候才真正的需要原子级别的一致性,同样如果你开始使用RDBMS,你也会困惑,因为关系型数据库经常需要跨越多个地点收集相同的一组数据。这样一个人的信息可能被打乱放到了多个表中,因为它们有不同的电话好吗,有不同的地址等等,这样就引出-好的数据库架构到底是什么样的?

在现在的任何系统之下,你都需要对数据一致性进行妥协,因为无论你使用什么类型的数据库,都不可能提供长时间运行的事务(足够轻量级的可以满足互联网应用级的要求),因为没有人可以在信息持久话的模式下做操作,而且每个用户对应一个连接,而事务则经常打断用户的操作,影响用户的体验,这就是进行原子级的数据一致性的代价。

但是在很多情况下,一毫秒甚至500毫秒不会有太多的不同,如果我修改了一些行关键字,最终Cassandra会进行持久话,那么我就可以进行读操作,可能这读操作是虚拟读。这里的问题在于,你不会关注一个短暂的错误,例如你正在看电影,发现里面的片段少了,没有数据加载,但是紧紧一会后,你再次单击那部电影,恢复正常了,可以正常观看了,这里你不太会太在意,你在意的是,每当电影目录被更新,你的操作都会被奇怪的中断,所以当前在互联网级的应用上,你需要在性能和系统规模及数据一致性之间做出妥协,有的时候,一致性跟性能及规模来说并不是过于重要。



在安装好JDK1.6的Windows系统上安装Cassandra,并进行简单的测试。

1 下载Cassandra

去http://cassandra.apache.org/下载即可。写此文章时最新的版本是1.0.1,

2 安装Cassandra
将下载的压缩包解压,假设解压的位置是F:\jl_work\apache-cassandra-1.0.1。



3:jre的安装与windows环境变量的配置
1)如果你的机器没有安装jre,请先下载windows版jre程序并配置好java的环境变量(已下载安装过就不用再装了)

去sun官方下载windows版式的jre http://java.sun.com/javase/downloads/index.jsp
2)设置环境变量"我的电脑"--"高级"选项卡--"环境变量"--"系统变量--新增",根据自己安装的jre与cassandra的位置来设置系统变量的值
我的机器jre安装在: C:\Program Files\Java\jre1.6.0_02

cassandra 安装在:F:\jl_work\apache-cassandra-1.0.1




4: 正式的启动Cassandra服务

在cmd窗口中执行F:\jl_work\apache-cassandra-1.0.5\bin下面的cassandra.bat启动cassandra服务



成功后会看到以下画面


出现上面的图后表示服务启动成功了,记住,这个cmd的窗口不要关闭,关闭了服务就被一起关闭了,接下来客户端的连接就不行了。
5:客户端的连接
服务启动成功之后,cassandra里面默认有一个测试数据库,访问的方式是在cmd窗口中执行F:\jl_work\apache-cassandra-1.0.5\bin下面的cassandra-cli.bat批处理文件,然后出现cassandra提示符,在提示符后面输入connect localhost/9160;就可以连上默认的数据库。下图是连接成功后的界面。



1)create keyspace mcas; 可理解为创建一个数据库
2)create column family timebasedtoken withcomparator=UTF8Type and

default_validation_class=UTF8Type andkey_validation_class=UTF8Type;

create column family timebasedtoken with

key_validation_class=UTF8Type and

comparator =UTF8Type and

column_metadata =

[

{column_name:serid ,validation_class:UTF8Type },

{column_name:seed,validation_class:UTF8Type},


{column_name: offset, validation_class:LongType},


{column_name: state, validation_class:LongType},

{column_name:modelType, validation_class: UTF8Type},

{column_name:timeWindow, validation_class: LongType},


{column_name: idType, validation_class:UTF8Type},

{column_name:idNumber, validation_class: UTF8Type},

{column_name:badPwCount, validation_class: LongType},


{column_name: staticPwd, validation_class:UTF8Type},

{column_name:staticPwVolity, validation_class: LongType},

{column_name:algorith, validation_class: UTF8Type},


{column_name: pwLength, validation_class:UTF8Type},

{column_name:chgCode, validation_class: UTF8Type},

{column_name:lastPwd, validation_class: UTF8Type}

];可理解为创建一个表


update column family timebasedtoken with keys_cached =1000000; //修改key缓存容量
再接着我们试着插入一条新记录,并读出这条记录的值。

插入的命令是"set"关键字
在命令提示符下输入 set User1[tableName1][column1] = testValue;
如果提示"Value inserted"表示插入成功。
同样我们把插入的值读出来,使用的关键字是"get"

在命令提示符下输入
get
timebasedtoken [ascii(0000000001)];
如图,我们把刚才插入的数据给读了出来。







在linux 下配置











配置修改如下:


即:


exportJAVA_HOME=/usr/java


PATH=$JAVA_HOME/bin:$PATH


exportPATH


CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CASSANDRA_HOME/lib/*.jar


export CLASSPATH


然后修改





即:


PATH=$PATH:$HOME/bin


CASSANDRA_HOME=$HOME/apache-cassandra-1.0.5/


exportPATH


export
CASSANDRA_HOME


配置修改完成


然后修改cassandra下面的conf下面的cassandra.yaml文件


rpc_address: 0.0.0.0
rpc_address变量修改为:0.0.0.0 否则外界ip访问不了


ok基本修改完成


linux下面启动cassandra和windows下面没什么差别



可能会修改jvm内存





常用的命令:


update column family timebasedtoken with keys_cached = 5000000; 修改keys缓存


./nodetool–h localhost cfstats(bin目录下面才能运行) //查看本机cassandra状态(里面含有各个keyspace)


运行运行成功后显示的一个例子





vmstat 2





所圈为cpu空闲百分数


ps -ef | grep cass 查找指定名称的进程





kill
杀死进程


kill 5536


http://www.cnblogs.com/elearn007/p/3800207.html
http://bbs.51cto.com/thread-971173-1-1.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。)Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。 功能   Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。   这里有很多理由来选择Cassandra用于您的网站。和其他数据库比较,有三个突出特点: 模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。 真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。 多数据中心识别 :你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值