Cassandra入门

9人阅读 评论(0) 收藏 举报
分类:

Cassandra要解决的问题就是伸缩(web-scale)。没有中心节点(masterless),对应于CAP理论,Cassandra属于AP

几个概念
节点(node)
集群(cluster,ring)
数据中心
复制因数
Gossiper:节点之间相互通知自己状态。

Cassandra重要特性:

  1. 没有单点故障,数据在多个节点上有多个拷贝。
  2. 可以调节的一致性,允许多种粒度的读写控制。
  3. 数据中心可察觉,在不同地理位置建立多个数据中心,性能更好
  4. 线性伸缩,主要是负载。
  5. 基于JVM,可通过JMX监控

Primary Key = Partition Key + Clustering Key

Partition Key:用来决定数据在哪个节点读写。
Clustering Key:保证磁盘存储的顺序,以及数据模型的唯一性。

应用场景

  1. 非常适合用在时间序列的,基于日志的,事件驱动的数据。一次写入,从不更新的数据。
  2. 数据量大,持续增长。受益于Cassandra水平伸缩性。
  3. 查询模式固定的场景 。

Cassandra反模式

  1. 频繁更新数据。因为背后的数据文件是不可变的,频繁更新导致数据存储在多个SSTable文件上,数据读取需要检查每个SSTable文件,增加读取延迟。
  2. 频繁删除数据。删除其实是写一个墓碑,所以删除也是写操作。
  3. 把Cassandra当作队列使用。队列需要经常的插入删除。导致太多的废数据。
  4. 灵活的查询方式。根据查询模式设计表结构,来保证查询可以在一个节点执行。通常一个查询对应一个表。Cassandra不适合多种,动态的查询。
  5. 全表扫描。没有WHERE的SELECT。违背了Cassandra的初衷,一个查询应该由一个节点来服务。
  6. 不恰当的使用Batch。Cassandra支持在一个事务中包含多个写操作。Batch是用来同事更新几个不同的表,保证一致性。而不是像RDBMS一样,对一个表一次写入成千上万条数据,这样会导致节点崩溃。
  7. 使用ByteOrderedPartitioner。已经过期,应该使用默认的Murmur3Partitioner
  8. Cassandra集群前面加负载均衡器。不需要。Cassandra有自己的负载均衡策略。
  9. 直接使用DataStax,不要使用Spring Data Cassandra。Spring Data 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]]
查看评论

快速入门cassandra

快速入门cassandra
  • losangelesunshine
  • losangelesunshine
  • 2015-09-29 12:21:20
  • 923

Cassandra集群快速入门

Cassandra集群快速搭建,容易上手。
  • hellohellohhhhh
  • hellohellohhhhh
  • 2017-11-07 15:11:45
  • 601

Cassandra 入门

一. 基本概念 1. Primary Key, Partition Key, Clustering Key 以下面的Table为例子: create table sample(       k_pa...
  • cassaba
  • cassaba
  • 2016-06-13 20:05:40
  • 1797

Cassandra之jdbc-cassandra使用笔记

最近要弄java程序访问cassandra进行读取数据,上网搜索之。。。 之前有过jdbc-mysql的使用,有这样的com.mysql.jdbc.Driver包,想必cassandra也应该有吧。 ...
  • dandykang
  • dandykang
  • 2015-10-16 10:03:56
  • 2005

Nosql - Cassandra 入门学习

  • 2011年06月04日 23:48
  • 468KB
  • 下载

cassandra cql解析

摘要 CQL相比较于SQL有很多的限制,原因在于cassandra是为大数据存储设计的,而它的部署模式又都是基于分区方式的,不像mongo还有复制集这个小规模的数据库集群设计,当数据量大的时候再进行...
  • FS1360472174
  • FS1360472174
  • 2017-06-04 17:41:07
  • 2445

Cassandra入门指南--安装及配置

Apache Cassandra是一个开源分布式NoSQL数据库系统。最初由Facebook创建,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。...
  • pzoozq
  • pzoozq
  • 2015-08-29 21:04:08
  • 10466

CQL3.0 for Cassandra 1.2

  • 2015年03月13日 15:50
  • 380KB
  • 下载

cassandra 3.x官方文档(7)---内部原理之如何读写数据

写在前面cassandra3.x官方文档的非官方翻译。翻译内容水平全依赖本人英文水平和对cassandra的理解。所以强烈建议阅读英文版cassandra 3.x 官方文档。此文档一半是翻译,一半是个...
  • FS1360472174
  • FS1360472174
  • 2017-02-12 21:24:01
  • 3458

CQL(Cassandra Query Language)函数

CQL supports 2 main categories of functions: the scalar functions, which simply take a number of v...
  • nangongyanya
  • nangongyanya
  • 2017-01-03 15:36:27
  • 1694
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 671
    排名: 7万+
    文章分类
    最新评论