Cassandra 最佳实践系列(1) - CQL QuickStart

简介: Cassandra最佳实践之简单搭建以及使用cql

简易搭建单节点C*

本文介绍如何简单的搭建一个Cassandra的单节点,以后会介绍如何构建多节点的Cassandra集群;为了搭建一个单节点我们需要做下面几件事情:

1.节点部署JAVA 基本环境;
2.获取需要的Cassandra二进制包:可以编译源码获取也可以直接官网下载3.11.5的bin包;
3.tar xf apache-cassandra-3.11.5-bin.tar.gz
4.cd apache-cassandra-3.11.5/bin目录;

5.执行./cassandra 启动单节点C*;

接下来你在bin目录下面通过执行./nodetool status 如果观测到下面的状态,就证明单节点的Cassandra已经正确启动。
20191209201821

注意

因为我们没有修改Cassandra的配置文件,这里单节点的进程都是使用默认配置,比如使用默认256的vnode,使用/var/lib/cassandra/data做数据存储目录,使用/var/lib/cassandra/commitlog做commitlog存储目录等, 默认绑定localhost,默认没有账户密码认证。

访问C*

通过cqlsh

bin目录下面的cqlsh类似于访问Cassandra的一个client,默认情况指定one级别去访问Cassandra,由于我们此处设置是sever绑定localhost,且cqlsh默认访问localhost,所以直接bin目录下面./cqlsh既可以访问到上面部署的单节点Cassandra,如下图:

20191209202549

我们可以通过cqlsh执行常见的Cassandra DDL、DML操作,比如这里我建一个keyspace ks以及在keyspace里面建一个table tb。分别使用如下cql:

CREATE KEYSPACE ks WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
use ks;
CREATE TABLE tb ( name text PRIMARY KEY ,age int);

我们可以在Cassandra里面通过执行:

DESCRIBE ks;

获取得到该keyspace下面的所有相关的keyspace、table、index、mv的定义;如下图:

20191209202958

我们也可以在这个表 tb里面执行insert操作以及select操作,如下图:

20191209203133

通过java driver

当然我们实际业务开发的时候很难通过cql去执行一些常见的dml操作,我们这里使用datastax 公司开源的java-driver进行常见的cassandra访问,当然也有其他版本以及语言的driver(见这里).

使用java driver的时候,只需要新建maven项目,然后pom.xml里面添加如下配置(我们这里使用3.8.0的java driver做演示):

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.8.0</version>
 </dependency>

然后我们的演示代码如下:

package com.aliyun.cstar.driver.test;


import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;

public class Test 
{
    static String[] CONTACT_POINTS = {"127.0.0.1"};
    static int PORT = 9042;

    public static void main(String[] args) {

      Cluster cluster = null;
      try {
        System.out.println("CLUSTER CONNECT !");
        //cluster operation 
        cluster = Cluster.builder().addContactPoints(CONTACT_POINTS).withPort(PORT).build();
        Session session = cluster.connect();

        System.out.println("CREATE KEYSPACE AND TABLE !");
        //DDL:keyspace and table operation
        session.execute("CREATE KEYSPACE IF NOT EXISTS  newks WITH replication "
                + "= {'class':'SimpleStrategy', 'replication_factor':1};");

        session.execute("CREATE TABLE IF NOT EXISTS  newks.newtb (name text PRIMARY KEY, age int)");
        
        System.out.println("INSERT INTO TABLE AND SELECT TABLE !");
        //DML:insert and select
        session.execute("INSERT INTO newks.newtb (name, age) VALUES('xla', 22)");
        session.execute("INSERT INTO newks.newtb (name, age) VALUES('xlb', 22)");
        session.execute("INSERT INTO newks.newtb (name, age) VALUES('xlc', 22)");
        
        ResultSet results = session.execute("SELECT * FROM newks.newtb");
        System.out.println(results.all());
        results = session.execute("SELECT name from newks.newtb");
        System.out.println(results.all());
        results = session.execute("SELECT count(*) from newks.newtb");
        System.out.println(results.all());
        
        System.out.println("FINISHED OPERATION !");
      } finally {
        if (cluster != null) cluster.close();
      }
    }
}

最后的结果如图:
20191209210530

CQL使用

这里简单介绍下常见的CQL的使用,主要分2类:DDL以及DML。

DDL :

CREATE KEYSPACE:

CREATE KEYSPACE ksname WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; 

如果是多DC的话可以如下建表,保证使用NetworkTopologyStrategy:

CREATE KEYSPACE ksname
    WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 3, 'DC2' : 3};

ALTER KEYSPACE :

ALTER KEYSPACE ksname
    WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4};

修改了副本数从3变成4.

CREATE TABLE :

CREATE TABLE t (
    pk text,
    v1 int,
    v2 text,
    v3 text ,
    PRIMARY KEY (pk, v1)
);

必须指定primary key,用来唯一确定数据在集群的唯一id。当然TABLE还有很多别的属性,这里使用默认的,其他的以后再详细介绍。

这里主要介绍我们常见的使用方式,还有drop keyspace,truncate table等等可以见这里

DML:

我们列举我们常见的SELECT 、INSERT、UPDATE 、DELETE、BATCH操作:

INSERT :

INSERT INTO t (pk, v1, v2, v3) VALUES ( 'pk1', 1, 'v2', 'v3');

一定要提供我们的PRIMARY KEY的数据;

SELECT :

SELECT pk, v1, v2, v3 FROM t;

UPDATE:

UPDATE t SET v2 = 'vv2' WHERE pk = 'pk1' AND v1 =1;

DELETE:

 DELETE  FROM  t WHERE pk = 'pk1' AND v1 =1;

BATCH:

BEGIN BATCH
      ... INSERT INTO t (pk, v1, v2, v3) VALUES ( 'pk1', 1, 'v2', 'vV3');
      ... APPLY BATCH ;
目录
相关文章
|
iOS开发
ElasticSearch-Head浏览器插件离线安装
ElasticSearch-Head浏览器插件离线安装
1565 0
|
6月前
|
缓存 JSON 搜索推荐
拼多多商品详情API接口指南
拼多多商品详情API是开放平台提供的商品数据查询接口,支持获取商品信息、价格、库存、销量、评价及促销等关键数据,返回结构化JSON格式。适用于电商数据分析、价格监测、竞品分析与个性化推荐场景,配合缓存、批量请求与签名优化策略,提升调用效率与系统稳定性。(238字)
|
5月前
|
编解码 API Windows
【剪映小助手】提交视频生成任务
提交视频生成任务。该接口采用异步处理模式,立即返回任务提交状态,视频生成在后台进行。支持任务排队,确保系统稳定性。
|
11月前
|
C++ 开发者 Windows
微软vc运行库,微软运行库,微软运行库下载地址
微软运行库合集包含Visual C++、.NET Framework、DirectX等核心组件,支持Windows系统下软件稳定运行,解决DLL缺失、运行报错等问题。集成多版本VC++运行库,兼容XP至Windows 11系统,适用于普通用户、开发者及游戏玩家。
9105 0
|
存储 缓存 监控
G1原理—8.如何优化G1中的YGC
本文主要探讨了针对1.5千QPS数据报表系统的性能优化,重点分析了因停顿时间过短导致新生代内存不足的问题,并提出了通过调整停顿时间来优化系统性能的解决方案。同时,还讨论了由于大量大对象分配引发系统吞吐量下降的情况,通过增大Region大小和调整TLAB参数有效减少了频繁的Mixed GC。最后,文章详细介绍了YGC相关参数(如TLAB、RSet、PLAB)的优化策略,为提升JVM垃圾回收效率提供了实用建议。
G1原理—8.如何优化G1中的YGC
|
存储 Linux 云计算
OpenStack云计算平台搭建
OpenStack 是一个开源的云平台管理项目,通过多个核心组件实现公有云、私有云和混合云的构建与管理。自2010年由NASA和Rackspace联合发起以来,已有众多企业和个人参与开发。OpenStack 简化了云部署流程,支持计算、存储和网络资源的高效管理,并兼容多种虚拟化技术和容器。最新版本为Xena,广泛应用于各行各业,如思科、英特尔等公司。
1389 0
|
缓存 运维 监控
Cassandra 性能压测及调优实战
掌握Cassandra分布式数据库性能压测及性能调优 作者:孤池
4691 1
Cassandra 性能压测及调优实战
|
机器学习/深度学习 人工智能 自然语言处理
NotebookLM与NotebookLlama 了解下 | AI工具
在AI技术飞速发展的今天,Google和Meta分别推出了基于大型语言模型的笔记本应用——NotebookLM和NotebookLlama。这两款产品不仅提供了强大的文档处理和编码支持,还在文档和编码领域引领了创新。NotebookLM强调个性化和隐私保护,而NotebookLlama则以开源和高度定制性著称。本文将深入解析这两款产品并进行对比分析。【10月更文挑战第16天】
1660 2
|
存储 SQL 关系型数据库
MySQL中的update操作与锁机制
本文探讨MySQL中`UPDATE`操作的自动加锁机制及其对数据一致性的保障作用。尤其在InnoDB存储引擎下,系统会在涉及索引的更新操作中加行锁或间隙锁,防止多事务并发修改同一条记录。通过福利码兑换系统的实例展示,当线程A开启事务更新库存时,线程B试图更新相同记录会被阻塞,直至线程A提交。此外,文章还介绍了乐观锁及版本号控制等策略进一步提升并发性能的方法。作者:小明爱吃火锅,来源:稀土掘金。
887 2
|
分布式计算 Hadoop 关系型数据库
Sqoop数据传输中的常见挑战及其解决方法
Sqoop数据传输中的常见挑战及其解决方法