Cassandra入门,
Cassandra要解决的问题就是伸缩(web-scale)。没有中心节点(masterless),对应于CAP理论,Cassandra属于AP
几个概念
节点(node)
集群(cluster,ring)
数据中心
复制因数
Gossiper:节点之间相互通知自己状态。
Cassandra重要特性:
Primary Key = Partition Key + Clustering Key
Partition Key:用来决定数据在哪个节点读写。
Clustering Key:保证磁盘存储的顺序,以及数据模型的唯一性。
应用场景
Cassandra反模式
下载Cassandra:
http://www.apache.org/dyn/closer.lua/cassandra/3.11.2/apache-cassandra-3.11.2-bin.tar.gz
解压后运行
apache-cassandra-3.11.2\bin\cassandra.bat
通过nodetool查看:
D:\Tools\apache-cassandra-3.11.2\bin>nodetool status
Datacenter: datacenter1
========================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 127.0.0.1 103.77 KiB 256 100.0% 043457d9-c61b-49ff-a6a3-5e1c118a554d rack1
运行cqlsh
D:\Tools\apache-cassandra-3.11.2\bin>cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>
创建Keyspace,注意这里是 datacenter1,需要和nodetool status查询的Datacenter名字相同。
CREATE KEYSPACE mykeyspace WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1':'1'}
添加表
CREATE TABLE mykeyspace.myTable (
name text, age int, group int,
PRIMARY KEY (group,name));
插入数据,查询:
cqlsh> INSERT INTO mykeyspace.myTable(name, age, group) VALUES('andy', 33, 1);
cqlsh> SELECT * FROM mykeyspace.myTable;
group | name | age
-------+------+-----
1 | andy | 33
Java API操作
添加dependency:
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.3.0</version>
</dependency>
添加Java类:
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;
public class CassandraTest {
public static void main(String[] args) {
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
Session session = cluster.connect();
session.execute("INSERT INTO mykeyspace.myTable(name, age, group) VALUES('Test', 33, 2)");
ResultSet rs = session.execute("SELECT * FROM mykeyspace.myTable WHERE group=? AND name=?", 2, "Test");
System.out.println(rs.all());
session.close();
cluster.close();
}
}
运行结果:
[Row[2, Test, 33]]
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。