Cassandra 介绍
前言
cassandra是一种NoSQL数据库,No是指No Relational。cassandra的数据模型结合了Dynamo的key/value和BigTable 的面向列的特点,主要被设计为存储大规模的分布式数据。
高可靠性:gossip座位通信协议,节点同等地位,无主从之分.(hbase是master/slaver,单点失效的可能) p2p 去中心化
高可扩展:级联可扩展,添加新节点操作简单
最终一致性:cap定律
高效写操作, 读取指定键值的记录较快, 但范围查询,与多个节点有关会慢, 读取全表也慢
cql语言,与sql语句相似度高
https://my.oschina.net/silentriver/blog/182678 Cassandra – 理解关键概念和数据模型
1.官网情况
http://cassandra.apache.org/
"Manage massive amounts of data, fast, without losing sleep"
目前版本 3.9 (pgp, md5 and sha1), released on 2016-09-29.
线性扩展(Linear scalability)
每个节点identical.
2.安装Cassandra
我的机器是windows10
下载 apache-cassandra-3.9-bin.tar.gz 后解压
添加系统变量 : CASSANDRA_HOME
然后添加path环境变量为%CASSANDRA_HOME%\bin
windows 就可以输入 cassandra 回车启动了
Linux
启动 bin/cassandra -f 关闭Control-C
或者 bin/cassandra 关闭 kill pid or pkill -f CassandraDaemon 查找进程 pgrep -f CassandraDaemon
查看状态
bin/nodetool status
3.配置集群
如果只是单点,则上面的配置就ok了,但如果要部署集群,则需要另外配置.
cassandra.yaml
最基本的参数
cluster_name
: the name of your cluster.seeds
: 以逗号分隔的集群种子IP地址. 当一个节点启动的时候,它会从配置文件中读取配置信息,这样它就知道它属于哪个集群,它需要跟哪个节点通信以获取其他节点信息(这个通信节点称为种子节点)。这些信息是必须在每个节点的cassandra.yaml里配置的。storage_port
: 非必须改变,除非此端口被防火墙墙了.整个集群内部要相同listen_address
: 本节点的IP, 因为要与其他节点通讯,所以这个参数设置正确非常重要. 或者,可以设置listen_interface告诉
Cassandra which interface to use. Set only one, not both.native_transport_port
: 客户端与Cassandra通讯的端口,保证不被墙.
更改目录位置
data_file_directories
: one or more directories where data files are located.commitlog_directory
: the directory where commitlog files are located.saved_caches_directory
: the directory where saved caches are located.hints_directory
: the directory where hints are located.
环境变量 cassandra-env.sh
- JVM_OPTS:Cassandra启动时候会把这个参数传递给JVM,所以额外的JVM命令行参数可以在这里设置
日志
logback.xml
3. CQLSH的使用
前期准备,需要python运行环境, python版本用2.7 不要用更高的版本
$ bin/cqlsh localhost
Connected to Test Cluster at localhost:9042.
[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4]
Use HELP for help.
cqlsh> SELECT cluster_name, listen_address FROM system.local; cluster_name | listen_address
--------------+----------------
Test Cluster | 127.0.0.1 (1 rows)
cqlsh>
步骤一,create a keyspace
CREATE KEYSPACE devJavaSource WITH REPLICATION={'class': 'SimpleStrategy','replication_factor': };
tip:可能运行失败,报错 OperationTimedOut: errors={'127.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=127.0.0.1
修改 cqlsh.py 文件的参数DEFAULT_REQUEST_TIMEOUT_SECONDS
为更大的值可以解决(修改后重启cassandra), 然而我也不知道具体原因.
步骤二, use created keyspace
USE devJavaSource;
步骤三, 新建表 插入数据 查询
CREATE TABLE USERS (ID int PRIMARY KEY,NAME text,ADDRESS text);
INSERT INTO USERS (ID, NAME, ADDRESS) VALUES (, ‘john’, ‘Oakland’); INSERT INTO USERS (ID, NAME, ADDRESS) VALUES (, ‘smith’, ‘California’); INSERT INTO USERS (ID, NAME, ADDRESS) VALUES (, ‘Joe’, ‘Nederland’);
SELECT * FROM USERS;
步骤四,建立索引
CREATE CUSTOM INDEX index_name ON keyspace_name.table_name ( column_name )
(USING class_name) (WITH OPTIONS = map)
cqlsh:devjavasource> create index on users(name);
4.节点之间的交互 gossip
节点独立,对等
最终一致性原理
gossip协议来发现集群种其他节点的位置和状态信息
peer-to-peer,定期交换状态信息
节点启动 ------------------>从cassandra.yaml得到集群名称,以及种子节点列表(因此每个节点的种子节点列表必须相同)
选派谁做种子节点没什么特别的意义,仅仅在于新节点加入到集群中时走gossip流程时有用,所以它们没什么特权
Gossiper(进程)通过每个节点的心跳来感知节点是否存活, 可以根据网络状况设置灵敏度参数phi_convict_threshold
Cassandra 介绍的更多相关文章
- Cassandra介绍
Cassandra介绍 Apache Cassandra 是一个开源的.分布式.无中心.弹性可扩展.高可用.容错.一致性可调.面向列的数据库.它基于Amazon Dynamo的分布式设计 Cassan ...
- NOSQL之Redis、MongDB、Habase、Cassandra的介绍与比较
一.Redis介绍 1.1Redis优点 (1)Redis拥有非常丰富的数据结构: (2)Redis提供事务的功能,可以保证一串命令的原子性,中间不会被任何打断. (3)数据存储在内存中,读写 ...
- Cassandra 数据模型 (基于CQL,解决胖列数量限制及灵活性问题)(1.1及以上版本)
文中主要交代Cassandra的编程模型及数据结构. 由于Cassandra版本数次更新,网上中文的资料已经有点过时,比较有代表性的比如ebuy那篇文章都已经过时了,于是自己找资料,结合官方博客写一篇 ...
- 转】R利剑NoSQL系列文章 之 Cassandra
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/3/ 感谢! R利剑NoSQL系列文章 之 Cassandr ...
- PySpark SQL 相关知识介绍
title: PySpark SQL 相关知识介绍 summary: 关键词:大数据 Hadoop Hive Pig Kafka Spark PySpark SQL 集群管理器 PostgreSQL ...
- 15个nosql数据库
1.MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案.当数据量达到50GB以上 ...
- 15个nosql
1.MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存 储解决方案.当数据量达到50GB以 ...
- 15一个NoSql数据库
随着因特网web2.0该网站的兴起.非关系型数据库,现在已经成为一个非常受欢迎的新领域.非关系数据库产品的发展非常迅速.而在处理传统的关系数据库web2.0现场.特别是大规模,高并发SNS类型web2 ...
- 《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构
布隆过滤器(bloom filter,BF): 二进制向量数据结构,时空效率很好,尤其是空间效率极高.作用:检测某个元素在某个巨量集合中存在. 构造: 查询: 不会发生漏判(false negativ ...
随机推荐
- day26_网络编程第一天
1.网络通信三要素(掌握) IP 端口号 协议(UPD&TCP) 2.UDP协议与TCP协议各自特点(掌握) UDP 1.不需要建立连接: 2.有数据大小限制,每个 ...
- 合理利用gradle的占位符功能
1.gradle中可以声明字符串或者其他变量,然后再buildType中使用buildConfigField 来往BuildConfig文件中插入一个字符类型的常量,如下 先声明 def umengD ...
- SpringMVC笔记
Struts1是采用单例模式的,在并发访问中出来资源混乱,于是出现Struts2被设计为多例的解决并发产生的 数据混乱由于Struts2引入了值栈,拦截器,OGNL等,,,是访问速度下降在原生的JSP ...
- RadioButtonList的使用
前台绑定: <asp:RadioButtonList ID="hlBatchYuJi" runat="server" RepeatColumns=&quo ...
- ng-class的用法
最近在学习angular框架,ng-class是angular框架的一个指令,这里是ng-class指令的官方解释: ng-class 指令用于给 HTML 元素动态绑定一个或多个 CSS 类. ng ...
- 数据库SQL优化总结
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- Bootstrap模态框(MVC)
BZ这篇博客主要是为大家介绍一下MVC如何弹出模态框.本文如果有什么不对的地方,希望大神们多多指教,也希望和我一样的小菜多多学习.BZ在这里谢过各位. 首先要在页面加上一个点击事件: @Html.Ac ...
- codeforces Magnets
link:http://codeforces.com/contest/344/problem/A 这道题目很简单. 把输入的01 和10 当做整数,如果相邻两个数字相等的话,那么就属于同一组,否则,就 ...
- 各种模板(part 2)
堆: using namespace dui //堆 { #include<queue> //需要的库 priority_queue < int > Q; //定义一个Q的大根 ...
- pyqt4:连接的一个带有参数的方法
一般在pyqt4中的信号连接很少连接带参数的方法,很多时候连接带参数的方法节约不少代码量. self.s5_thread=scene.Worker5() self.log_get=QtCore.QTi ...