对于小白来说,配置安装开源软件是一个繁琐且绝望的过程,在这里强势表白StackOverFlow,我在配置过程中遇到的很多个buggggggggg都是在上面找到fix方案的(其实也不能算bug,应该算是踩过的坑吧emm
本地安装Cassandra
踩到的坑:
(1)Cassandra现行版本不能适配jdk9 需要jdk8往下,但是要jdk7往上 emm
(2)Cassandra3.9 版本不能适配jdk8,会抛异常Exception (java.lang.AbstractMethodError) encountered during startup: org.apache.cassandra.utils.JMXServerUtils$Exporter.exportObject(Ljava/rmi/Remote;ILjava/rmi/server/RMIClientSocketFactory;Ljava/rmi/server/RMIServerSocketFactory;Lsun/misc/ObjectInputFilter;)Ljava/rmi/Remote
具体原因在StackOverFlow上:https://stackoverflow.com/questions/48328661/cant-start-cassandra-after-os-patch-up
(3)改来改去,我用了Cassandra-3.11.2
Cassandra本地安装使用其实挺方便的,具体步骤:
(1)从官网下载到本地:http://www.apache.org/dyn/closer.lua/cassandra/3.11.2/apache-cassandra-3.11.2-bin.tar.gz
(2)解压以后不用过多配置,都可以用默认的,然后运行bin/cassandra -f
-f的意思是让cassandra的运行在前台显示而不是去后台运行,大概出现如下表明运行成功
(3).bin/cqlsh 就可以直接在控制台里输入cql语句建表啦
Cassandra需要适配合适的jdk版本,我的mac上之前update了jdk9,不能很好适配,所以需要更换jdk版本
那么问题来了,如何更换jdk版本呢?
(1)进入bash_profile修改环境变量
vim ~/.bash_profile
(2)设置jdk版本,在.bash_profile里添加如下语句
export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
export JAVA_HOME=$JAVA_8_HOME
(3)alias命令切换jdk版本,在.bash_profile里添加如下语句
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk7='export JAVA_HOME=$JAVA_7_HOME'
(4)修改完成后保存退出
(5)重新执行.bash_profile文件,让配置生效
source ~/.bash_profile
(6)直接使用命令jdk7 或者命令 jdk8就可以自由切换jdk版本
NOSQL 需求
(1)高并发读写的性能需求(High Performance)
(2)高容量和高效的存储需求(Huge S头rage)
(3)高扩展性和高可用性需求
传统关系型数据库的两大瓶颈:
(1)数据横向扩展能力低下:
a.受业务规则影响,需求变动导致分库分表的维护复杂
b.系统数据访问层代码需要修改
c. master-slave架构中,slave节点实时性保证问题,对于实时性很高的场合需要做一些处理
d. 高可用性问题,master-slave架构中,所有的数据处理通过master进行分配,如果master出现故障,容易出现单点故障导致整个系统崩溃
(2)数据的高效率存储和访问的需求满足能力低
a. 存储记录数量有限,横向可扩展能力有限,纵向数据可承受能力也是有限的
b. 对于大数据的查询,SQL查询效率极低,在数据量达到一定程度,查询时间会呈指数级别增长
NO-SQL 优势:
(1)易扩展,NO-SQL为NOT ONLY SQL,意为去掉或者减弱数据之间的关系
(2)灵活的数据模型,NO-SQL无需提前为需要存储的模型建立字段,随时存储自定义的数据格式
(3)高可用:数据库之间可以较快复制
(4)大数据量,高性能:具有很高的读写性能
NO-SQL分类:
(1)键值存储(key-value stores)
比如 redis,存储会话信息,用户配置信息等
(2)面向表(Table-oriented)
BigTable/Cassandra/HBase 适合事件记录/博客平台记录等
(3)面向文本(Document-oriented)
MongoDB
(4)面向图(Graph-oriented)
Neo4J
Cassandra优势:
Cassandra由一堆数据库节点共同构成的一个分布式网络服务
对Cassandra写操作,会被复制到其他网络节点
对Cassandra读操作,会被路由到某个节点上去读取
Cassandra集群扩展性能简单
(1)高度可扩展性,纯粹意义上的水平扩展,支持动态增加节点
(2)高度可用性,P2P去中心化处理
(3)NO-SQL列族实现
(4)非常高的写入吞吐量和良好的读取吞吐量
(5)支持CQL查询语言,支持范围查询
(6)可调节的一致性
(8)灵活模式
Cassandra的应用场景:
(1)待处理的数据量很大
(2)数据量超过关系型数据库的承载能力
(3)大量集群