cassandraDb基本教程

本文介绍了Cassandra,一个开源分布式数据库系统,强调其高可用性、分布式架构、灵活的数据模型和CQL查询语言。还详细讲解了nodetool工具的使用以及在Cassandra环境中的键空间、列族、主键和索引的概念,以及TTL在数据生命周期管理中的应用。
摘要由CSDN通过智能技术生成

cassandra简介

Cassandra是一个开源的分布式NoSQL数据库管理系统,最初由Facebook开发,并于2008年开源。它被设计成高度可扩展、高性能、分布式的数据库系统,用于处理大规模的数据。Cassandra采用了分布式架构和无中心化设计,能够提供高可用性和容错性。

Cassandra具有以下特点:

  1. 分布式:数据被分布存储在多个节点上,可以动态地增加节点以扩展存储容量和处理能力。
  2. 高可用性:Cassandra使用复制和自动故障转移来确保数据的高可用性。
  3. 灵活的数据模型:支持弹性的数据模型,可以适应各种数据类型和数据访问模式。
  4. 支持查询语言CQL:Cassandra Query Language (CQL)类似于SQL,提供了丰富的查询和数据操作功能。
  5. 跨数据中心复制:能够在不同数据中心之间进行数据复制,支持多地域部署。

Cassandra通常用于需要处理大规模数据、高写入和读取吞吐量的场景,如社交网络、日志分析、时间序列数据等。它已经被许多大型互联网公司和企业广泛应用。

nodetool是什么? 

nodetool 是 Apache Cassandra 提供的一个用于管理和监控 Cassandra 集群的命令行工具。通过 nodetool,用户可以执行各种操作,如查看集群状态、管理节点、执行数据修复、手动触发压缩操作等。nodetool 提供了丰富的命令选项,可以帮助管理员轻松地管理 Cassandra 集群。

一些常用的 nodetool 命令包括:

  1. nodetool status:查看集群中每个节点的状态信息,包括节点的 IP 地址、数据中心、负载情况等。
  2. nodetool repair:触发数据修复操作,用于确保数据的一致性和完整性。
  3. nodetool decommission:将一个节点从集群中移除,通常用于扩容或节点替换时。
  4. nodetool cleanup:清理失效节点上的无效数据副本,以释放磁盘空间。
  5. nodetool compaction:手动触发数据压缩操作,可以帮助减少数据碎片和节省磁盘空间。
  6. nodetool snapshot:创建数据快照,用于备份或恢复数据。
  7. nodetool flush:将内存中的数据刷新到磁盘,确保数据持久化。
  1. 在 CassandraDb 环境中创建您自己的键空间。

    下面通俗解释几个这段任务中的几个概念:

    • 列族:列族相当于关系数据库的表Table,是包含了多行(Row)的容器

    • 键空间(Keyspace): Cassandra的键空间(KeySpace)相当于关系型数据库的数据库,我们创建一个键空间就是创建了一个数据库。键空间包含一个或多个列族(Column Family);

      语法:
      CREATE KEYSPACE <identifier> WITH <properties>;
      使用例子:
      Create keyspace convert_key with replicaton=
      {
          'class':strategy name,   --strategy name:副本放置策略,
                                   --包括:
                                   --简单策略SimpleStrategy、
                                   --网络拓扑策略NetworkTopologyStrategy,
                                   --选择其中的一个
          'replication_factor': 3  --代表 复制因子,放置在不同节点上的数据的副本数
      };
      
      use 你的键空间名字;
      
  2. 创建表

    1. 注意这里使用了uuid作为user_id的类型

      CREATE TABLE users (
          userid UUID PRIMARY KEY, --还是必须要规定主键,uuid是一种通用唯一标识符
          username TEXT,
          password TEXT
      );
      
      CREATE TABLE files (
          fileid UUID PRIMARY KEY,
          filename TEXT,
          filepath TEXT,
          updatetime date,
      );
      
      
  3. 增删改

    1. 增加记录(注意:cassandra中不能一次性插入多行,只能一个insert插入一行语句)

      这里给出users的填充例子,注意这里的userid使用now()函数进行赋值,now() 函数用于生成当前时间的时间戳(时间戳(timestamp)是指表示特定时间点或时间间隔的数字值):

      INSERT INTO users (userid, username, password) VALUES (now(), 'JohnDoe', 'password123');
      INSERT INTO users (userid, username, password) VALUES (now(), 'JaneSmith', 'securepass');
      INSERT INTO users (userid, username, password) VALUES (now(), 'MikeJohnson', 'mypass123');
      INSERT INTO users (userid, username, password) VALUES (now(), 'EmilyDavis', 'password456');
      INSERT INTO users (userid, username, password) VALUES (now(), 'AlexWilson', 'hello123');
      INSERT INTO users (userid, username, password) VALUES (now(), 'SarahBrown', 'pass1234');
      
    2. 修改数据:

      UPDATE 表名字 SET 列名称=改变之后的值 WHERE 条件;
      
    3. 删除行:

      DELETE FROM 表名字 WHERE 条件;

 

 PRIMARY KEY主键

Cassandra 中,通过定义表的主键(PRIMARY KEY)来组织数据存储和索引。主键由分区键(Partition Key)和聚簇列(Clustering Columns)组成。

比如在主键定义 PRIMARY KEY ((fileid,filename),updatedate) 中:

  • (fileid,filename) 是组合起来形成分区键。这意味着数据将根据 fileid和 filename的值进行分区,即相同 fileid和 filename值的数据将存储在同一个分区中。
  • updatedate 列则是聚簇列,它用于在分区内对数据进行排序。在这种情况下,数据将按照 updatedate列的值在分区内进行排序存储。
    CREATE TABLE user1 (
        userid UUID,
        username TEXT,
        password TEXT,
        PRIMARY KEY((userid,username),password)
    );
    
    CREATE TABLE file1 (
        fileid UUID,
        filename TEXT,
        filepath TEXT,
        updatetime date,
        PRIMARY KEY((fileid,filename),updatedate)
    );

    索引

  • 为什么需要列族的索引?因为Cassandra 查询语言 (CQL) SELECT 查询缺乏通常我们使用 SQL 操作 JOIN、GROUP BY ,并且WHERE操作也大大收到限制。 在 SQL 中,您可以按任何列进行筛选查询,而在 CQL 中,你只能按分布键(分区键)、簇键(簇列)和二级指标。默认情况下,DBMS 不提供按非键列(紫色的列就是)搜索的功能。那么如果我们想根据非键列索引怎么办,两个方法
    • 方法1-创建index

  • 语法:
    create index 这个索引的名字 on 表名(非键列名);
    例如:
    create index usernameindex on users(username);
    
    删除这个index语法:
    drop index 这个索引的名字:
    在这:
    drop index usernameindex;

    这样就可以进行索引:

  • 方法2-使用allow filtering:

 标量函数

  1. 使用toTimestamp()将日期时间值转换为时间戳:

    SELECT fileid, filename, toTimestamp(updatetime) AS timestamp_updatetime
    FROM files;
    
    
  2. 使用now()获取当前日期和时间:

    SELECT fileid, filename, now() AS current_datetime
    FROM files;

    指示TTL

  3. 要在Cassandra中添加具有TTL(生存时间)的行,使用INSERT语句并在列值后面指定TTL值。下面是一个示例:

    
    INSERT INTO files (fileid, filename, filepath, updatetime)
    VALUES (uuid(), 'example.txt', '/path/to/example.txt', '2023-02-12')
    USING TTL 3600;
    
    

    在上述示例中,我们向files表插入一行数据,并在最后使用USING TTL子句设置TTL值为3600秒(1小时)。这意味着插入的数据将在1小时后自动过期。

    请注意,TTL值是以秒为单位的整数。在指定TTL时,请根据实际需求选择适当的值。

    INSERT操作:这条消息消失之后这条记录消失,如果insert的内容是和某条记录相同的也可以实现,此时和更新的效果相同,并且TTL时间之后,那条更新的消息也消失。
    INSERT INTO my_table (id, data) VALUES (123, 'Example Data') USING TTL 3600;
    UPDATE操作:更新某一个值之后TTL时间过后,那个单独更新的值会是null
  4. UPDATE my_table USING TTL 7200 SET data = 'Updated Data' WHERE id = 123;

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值