• Cassandra


    介绍

    Apache Cassandra是一个高度可扩展的高性能分布式数据库,用于处理大量商用服务器上的大量数据,提供高可用性,无单点故障。这是一种NoSQL类型的数据库。

    特点

    • 弹性可扩展性
      是高度可扩展的; 它允许添加更多的硬件以适应更多的客户和更多的数据根据要求。
    • 始终基于架构
      没有单点故障,它可以连续用于不能承担故障的关键业务应用程序。
    • 快速线性性能
      线性可扩展性的,即它为你增加集群中的节点数量增加你的吞吐量。因此,保持一个快速的响应时间。
    • 灵活的数据存储
      适应所有可能的数据格式,包括:结构化,半结构化和非结构化。它可以根据您的需要动态地适应变化的数据结构。
    • 便捷的数据分发
      通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据。
    • 事务支持
      支持属性,如原子性,一致性,隔离和持久性(ACID)。
    • 快速写入
      被设计为在廉价的商品硬件上运行。 它执行快速写入,并可以存储数百TB的数据,而不牺牲读取效率。

    • 详细架构说明参考:https://www.w3cschool.cn/cassandra/cassandra_architecture.html

    数据模型

    集群(Cluster)》键空间 (Keyspace)》列族 》列 》超级列

    参考说明:https://blog.csdn.net/u010859650/article/details/85244056
                      https://cloud.tencent.com/developer/article/2031320

    安装Docker版本

    # 获取镜像
    docker pull cassandra
    # 启动镜像
    docker run --name some-cassandra -p 9042:9042 -d cassandra:latest
    # 进入容器
    docker exec -it some-cassandra  bash
    # 修改配置文件 cassandra.yaml
    authenticator: AllowAllAuthenticator
    # 修改为:
    authenticator: PasswordAuthenticator
    # 这样可以使用用户名和密码,进行远程连接。默认的策略,只能本地连接
    # 修改方法
    # 复制文件到本地(里面没有 vim 不能编辑)
    docker cp fa14e5d96a6f:/etc/cassandra/cassandra.yaml cassandra.yaml
    # 修改后,先把原来的删除再复制进去
    rm -rf cassandra.yaml 
    docker cp cassandra.yaml fa14e5d96a6f:/etc/cassandra/cassandra.yaml 
    # 再看下权限是否有问题, 如需要就修改权限
    chmod  777 cassandra.yaml 
      默认账户密码为 cassandra cassandra
    
     docker官方地址:https://hub.docker.com/_/cassandra/

    其他 linux 集群部署安装参考:https://www.w3cschool.cn/cassandra/cassandra_installation.html

    python 操作

    # -*- encoding: utf-8 -*-
    from cassandra import ConsistencyLevel
    # 引入Cluster模块
    from cassandra.cluster import Cluster
    # 引入DCAwareRoundRobinPolicy模块,可用来自定义驱动程序的行为
    # from cassandra.policies import DCAwareRoundRobinPolicy
    from cassandra.auth import PlainTextAuthProvider
    from cassandra.query import SimpleStatement
    import pandas as pd
    
    
    # 配置Cassandra集群的IP,记得改成自己的远程数据库IP哦
    contact_points = ['1.1.1.1', '2.2.2.2', '3.3.3.3']
    # 配置登陆Cassandra集群的账号和密码,记得改成自己知道的账号和密码
    auth_provider = PlainTextAuthProvider(username='XXX', password='XXX')
    # 创建一个Cassandra的cluster
    cluster = Cluster(contact_points=contact_points, auth_provider=auth_provider)
    # 连接并创建一个会话
    session = cluster.connect()
    # 定义一条cql查询语句
    cql_str = 'select * from keyspace.table limit 5;'
    simple_statement = SimpleStatement(cql_str,consistency_level=ConsistencyLevel.ONE)
    # 对语句的执行设置超时时间为None
    execute_result = session.execute(simple_statement, timeout=None)
    # 获取执行结果中的原始数据
    result = execute_result._current_rows
    # 把结果转成DataFrame格式
    result = pd.DataFrame(result)
    # 把查询结果写入csv
    result.to_csv('连接远程数据库.csv', mode='a', header=True)
    # 关闭连接
    cluster.shutdown()

    参考:https://www.itdaan.com/blog/2019/02/15/758c4f9d3635617b16ab0eb4d4a965f3.html
               https://www.jianshu.com/p/4ca2c6fdb916

    Shell 命令

    • Copy - 此命令将数据从Cassandra复制到文件中
      COPY emp (emp_id, emp_city, emp_name, emp_phone,emp_sal) TO ‘myfile’;
    • Describe cluster -此命令提供有关集群的信息
    • Describe Keyspaces -此命令列出集群中的所有键空间。
    • Describe tables -此命令列出了键空间中的所有表。
    • Describe tables -此命令提供表的描述。

      参考 https://www.w3cschool.cn/cassandra/cassandra_shell_commands.html

    键空间

    • 创建键空间

      键空间是一个定义节点上数据复制的命名空间。集群每个节点包含一个键空间。
      CREATE KEYSPACE “键名称”
             WITH replication = {'class': ‘策略名称’, 'replication_factor' : ‘复制因子个数’}
             【AND durable_writes = ‘bool 值’】;
      # CREATE KEYSPACE 语句有两个属性:replication 和 durable_writes。

      复制

      复制选项用于指定副本位置策略和所需副本的数量。下表列出了所有副本位置策略。

      策略名称 描述
      简单的策略 SimpleStrategy 为集群指定简单的复制因子。
      网络拓扑策略 NetworkTopologyStrategy 使用此选项,可以单独为每个数据中心设置复制因子。
      旧网络拓扑策略   使用此选项,可以单独为每个数据中心设置复制因子。

      使用此选项,您可以指示Cassandra是否对当前KeySpace的更新使用commitlog。此选项不是强制性的,默认情况下,它设置为true。

      示例

      下面给出了创建KeySpace的示例。

      • 这里我们创建一个名为TutorialsPoint 的KeySpace。

      • 我们使用第一个副本放置策略,即简单策略

      • 我们选择复制因子为1个副本

      cqlsh.> CREATE KEYSPACE tutorialspoint
      WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};

      验证

      您可以使用命令Describe验证是否创建表。如果对键空间使用此命令,它将显示如下所示创建的所有键空间。

      cqlsh> DESCRIBE keyspaces;
      
      tutorialspoint system system_traces 

      Durable_writes

      默认情况下,表的durable_writes属性设置为true,但可以将其设置为false。您不能将此属性设置为simplex策略

      示例

      下面给出了示例持久写入属性的使用示例。

      cqlsh> CREATE KEYSPACE test
      ... WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 }
      ... AND DURABLE_WRITES = false;

      验证

      您可以通过查询系统键空间来验证test KeySpace的durable_writes属性是否设置为false。此查询提供了所有KeySpaces及其属性。

      cqlsh> SELECT * FROM system.schema_keyspaces;
      
        keyspace_name | durable_writes |                                       strategy_class | strategy_options
      ----------------+----------------+------------------------------------------------------+----------------------------
      
                 test |          False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1" : "3"}
      
       tutorialspoint |           True |          org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "4"}
      
               system |           True |           org.apache.cassandra.locator.LocalStrategy | { }
      
        system_traces |           True |          org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "2"}
      
      (4 rows)

      在这里可以观察测试 KeySpace 的 durable_writes 属性设置为 false

    • 修改键空间

      ALTER KEYSPACE 键名称
      WITH REPLICATION = {'class' : '策略名称', 'datacenter1' : 复制因子个数} AND DURABLE_WRITES = true/false;
    • 删除键空间

      DROP KEYSPACE 键名称;

    •  创建表

      CREATE TABLE emp(
         emp_id int PRIMARY KEY,
         emp_name text,
         emp_city text,
         emp_sal varint,
         emp_phone varint
         );
    • 修改表

      # 添加列
      ALTER TABLE emp ADD emp_email text;
      # 删除列
      ALTER TABLE emp DROP emp_email;
    • 创建索引

      CREATE INDEX name ON emp1 (emp_name);
    • 批量处理

      BEGIN BATCH
      <insert-stmt>/ <update-stmt>/ <delete-stmt>  # 多个执行语句 
      APPLY BATCH
      # 示例:
      BEGIN BATCH
      INSERT INTO emp (emp_id, emp_city, emp_name, emp_phone, emp_sal) values(  4,'Pune','rajeev',9848022331, 30000);
      UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;
      DELETE emp_city FROM emp WHERE emp_id = 2;
      APPLY BATCH;

         

              参考:https://www.w3cschool.cn/cassandra/cassandra_create_table.html

     插入数据

    • insert

      INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal) VALUES(1,'ram', 'Hyderabad', 9848022338, 50000);
    • update

      UPDATE emp SET emp_city='Delhi',emp_sal=50000 WHERE emp_id=2;
    • select

      SELECT * FROM emp WHERE emp_sal=50000;
      参考:https://www.w3cschool.cn/cassandra/cassandra_create_data.html

    CQL数据类型

    • 内置数据类型

    • 集合类型

    • 集合类型的使用

      # 创建表
      CREATE TABLE data(name text PRIMARY KEY, email list<text>);
      # 插入数据
      INSERT INTO data(name, email) VALUES ('ramu',['abc@gmail.com','cba@yahoo.com']);
      # 修改数据
      UPDATE data SET email = email +['xyz@tutorialspoint.com'] where name = 'ramu';

     可视化软件

               下载地址:http://www.mongodbmanager.com/cassandra/

                

      

  • 相关阅读:
    任正非:所有公司都是管理第一,技术第二(没有一流管理,领先的技术就会退化;有一流管理,即使技术二流也会进步)
    QuickReport的OnNeedData的触发情况
    Quickreport不用数据字段,如何实现多页打印?
    我要继续做开发吗(对18个问题,全部都是肯定!)
    一台主机,至多可以开启多少个线程
    BenchmarkDotNet
    开发资源
    WebSocket
    TCP
    “在什么时候学习编程才合适?”
  • 原文地址:https://www.cnblogs.com/luochunxi/p/16597583.html
Copyright © 2020-2023  润新知