开源NoSQL数据库Cassandra3.0实战

简介
  Cassandra是一套开源分布式NoSQL数据库系统,Cassandra的主要特点是无中心的设计,其分布式集群由一堆数据库节点共同构成一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。
  随着Nosql的火热,Hbase、Mongodb已然成了NoSQL数据库的代表,而Cassandra在国内的使用却不多(据说360公司在大规模使用),根据百度指数的显示cassandra的火热度远远低于mongodb和Hbase。

开源NoSQL数据库Cassandra3.0实战

而在国外,根据数据库评分网站DB-Engines的16.10的最新数据,cassandra排名上升到了第7,排名远远高于Hbase。

开源NoSQL数据库Cassandra3.0实战


优点:

1、模式灵活
使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。
2、真正的可扩展性
Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
3、多数据中心识别
你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。
4、范围查询
如果你不喜欢全部的键值查询,则可以设置键的范围来查询。
5、列表数据结构
在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。
6、分布式写操作
有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败

缺点

1. 读的性能太慢
无中心的设计,造成读数据时通过逆熵做计算,性能损耗很大,甚至会严重影响服务器运作。
2. 数据同步太慢(最终一致性延迟可能非常大)
由于无中心设计,要靠各节点传递信息。相互发通知告知状态,如果副本集有多份,其中又出现节点有宕机的情况,那么做到数据的一致性,延迟可能非常大,效率也很低的。
3. 用插入和更新代替查询,缺乏灵活性,所有查询都要求提前定义好。
与大多数数据库为读优化不同,Cassandra的写性能理论上是高于读性能的,因此非常适合流式的数据存储,尤其是写负载高于读负载的。与HBase比起来,它的随机访问性能要高很多,但不是很擅长区间扫描,因此可以作为HBase的即时查询缓存,由HBase进行批量的大数据处理,由Cassandra提供随机查询的接口
4. 不支持直接接入Hadoop,不能实现MapReduce。
现在大数据的代名词就是hadoop,做为海量数据的框架不支持hadoop及MapReduce,就将被取代。除非Cassandra能够给出其他的定位,或者海量数据解决方案。DataStax公司,正在用Cassandra重构HDFS的文件系统,不知道是否可以成功。

一:部署cassandra
规划:
集群节点:3
10.10.8.3
10.10.8.4
10.10.8.5

(1)配置jdk
10.10.8.3、10.10.8.4、10.10.8.5

$ wget Oracle.com/otn-pub/Java/jdk/8u112-b15/jdk-8u112-linux-x64.tar.gz
$ tar xf jdk-8u112-linux-x64.tar.gz -C /opt
$ vim /etc/profile
增加
export JAVA_HOME=/opt/jdk1.8.0_112
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
$ source /etc/profile

(2)安装Cassandra
10.10.8.3、10.10.8.4、10.10.8.5

$ wget
$ tar xvf apache-cassandra-3.0.9-bin.tar.gz -C /opt
$ ln -s  /opt/apache-cassandra-3.0.9 /opt/cassandra

(3)配置
10.10.8.3、10.10.8.4、10.10.8.5

$ copy conf/cassandra.yaml conf/cassandra.yaml.bak
$ vim conf/cassandra.yaml
#cassandra-3.0.9的精简配置,可以运行集群的最低配置。
cluster_name: 'My Cluster'            #集群名
num_tokens: 256
seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "10.10.8.3,10.10.8.4,10.10.8.5"  #节点ip列表
listen_address: 10.10.8.5                #进程监听地址
storage_port: 7000                        #集群中节点通信的端口号
start_native_transport: true              #开启native协议
native_transport_port: 9042              #客户端的交互端口
 
data_file_directories:
    - /data/cassandra/dbdata              # 数据位置,多盘的话可以写多个目录
commitlog_directory:
    - /data/cassandra/commitlog          #commitlog的路径,与data目录分开磁盘,提高性能
saved_caches_directory:
    - /data/cassandra/caches              #缓存数据目录
hints_directory:
    - /data/cassandra/hints
commitlog_sync: batch                    #批量记录commitlog,每隔一段时间将数据commitlog
commitlog_sync_batch_window_in_ms: 2      #batch模式下,批量操作缓存的时间间隔
#commitlog_sync: periodic                #周期记录commitlog,每一次有数据更新都commitlog
#commitlog_sync_period_in_ms: 10000      #periodic模式,刷新commitlog的时间间隔
 
partitioner: org.apache.cassandra.dht.Murmur3Partitioner
endpoint_snitch: SimpleSnitch

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4a833008437d165e223484256a1fec4a.html