通过Lindorm-cqlsh连接宽表引擎

Lindorm-cqlsh是云原生多模数据库 Lindorm团队基于Cassandra cqlsh修改后提供的Shell工具,提供Windows版本和Unix版本。您可以在本地或ECS上安装Lindorm-cqlsh工具,通过Lindorm-cqlsh连接并访问Lindorm宽表引擎。

前提条件

  • 已将客户端的IP地址加入到Lindorm实例的白名单中,具体操作请参见设置白名单

  • 已获取云原生多模数据库 Lindorm宽表引擎的CQL连接地址,具体操作请参见查看连接地址获取连接地址

  • 已下载并解压Lindorm-cqlsh,下载链接为下载Lindorm-cqlsh

    如果应用部署在ECS实例,您需要确保云原生多模数据库 Lindorm实例和ECS实例满足以下条件,以保证网络的连通性。ECS实例信息的查看方法请参见查看实例信息

    • 所在地域相同,并建议所在可用区相同(以减少网络延时)。

    • 网络类型相同。

基本命令

访问Lindorm宽表支持以下Lindorm-cqlsh命令。

Documented shell commands:===========================
CAPTURE  COPY  DESCRIBE  LOGIN   DESC  EXIT  HELP PAGING  SHOW
CQL help topics:================
CREATE_KEYSPACE        TEXT                ALTER_KEYSPACE           TIME       CREATE_ROLE
DROP_USER              TIMESTAMP           ALTER_TABLE              CREATE_TABLE
GRANT                  ALTER_USER          INSERT                   UPDATE   
CREATE_USER            INSERT_JSON         USE                      ASCII
DATE                   INT                 UUID                     BATCH
DELETE                 JSON                BEGIN                    KEYWORDS        
BLOB                   DROP_COLUMNFAMILY   LIST_PERMISSIONSBOOLEAN  LIST_ROLES      
COUNTER                DROP_INDEX          LIST_USERS               DROP_KEYSPACE   
PERMISSIONS            CREATE_COLUMNFAMILY REVOKE                   DROP_ROLE                 
SELECT                 CREATE_INDEX        DROP_TABLE                SELECT_JSON

操作步骤

  1. 执行以下命令将Lindorm-cqlsh与云原生多模数据库 Lindorm连接。

    bin/cqlsh <host> <port> -u <username> -p <password>
    说明
    • 建议将bin/cqlsh所在的目录Python环境的版本设置为python2.7.x版本。

    • <host>:在云原生多模数据库 Lindorm控制台上获取的宽表引擎CQL连接地址,例如ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com

    • <port>:云原生多模数据库 Lindorm宽表引擎的CQL连接地址端口号,默认为9042。

    • <username>:Lindorm宽表引擎的用户名,默认为root。

    • <password>:Lindorm宽表引擎用户名对应的密码,如果您忘记密码,可以通过集群管理系统重置密码,具体操作请参见修改用户密码

    • 云原生多模数据库 Lindorm支持多种Lindorm-cqlsh的访问命令,更多信息您可以通过bin/cqlsh -help命令查看。

  2. 通过Lindorm-cqlsh创建keyspace。Lindorm中的keyspace与关系型数据库中的database概念类似,一个keyspace可以包含一个或多个表格或列簇。

    CREATE KEYSPACE test_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};

    创建成功后执行以下语句查看keyspace:

    DESCRIBE KEYSPACE test_keyspace;
  3. 使用USE命令切换至目标keyspace。

    USE test_keyspace;

    返回以下信息:

    cqlsh:test_keyspace>
  4. 通过Lindorm-cqlsh访问Lindorm宽表的代码示例如下:

    • 通过Lindorm-cqlsh创建表格test_user。表格中包含first_name和last_name两个字段,字段的数据类型为text,并且first_name是这张表的PRIMARY KEY。

      CREATE TABLE test_user(first_name text, last_name text, PRIMARY KEY (first_name));
      说明

      创建表格操作前如果您没有执行USE test_keyspace;命令,可以通过以下语句创建表格。

      CREATE TABLE test_keyspace.test_user(first_name text, last_name text, PRIMARY KEY (first_name));
    • 查看表test_user的详细信息。

      DESCRIBE TABLE test_user;

      返回以下信息:

      CREATE TABLE test_keyspace.test_user (
          first_name text PRIMARY KEY,
          last_name text
      ) WITH bloom_filter_fp_chance = 0.01    
          AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}    
          AND comment = ''    
          AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}    
          AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}    
          AND crc_check_chance = 1.0    
          AND dclocal_read_repair_chance = 0.1    
          AND default_time_to_live = 0    
          AND gc_grace_seconds = 864000    
          AND max_index_interval = 2048    
          AND memtable_flush_period_in_ms = 0    
          AND min_index_interval = 128    
          AND read_repair_chance = 0.0    
          AND speculative_retry = '99PERCENTILE';
      说明

      DESCRIBE TABLE命令将创建表语句以格式化的形式显示出来,除了您制定的配置项,还包含一些默认的配置项。Lindorm表级别的配置和Cassandra部分属性是不一样的,对于不一样的属性使用Cassandra CQL默认配置展示。

      • Lindorm表级别无使用意义的配置项为:crc_check_chance、gc_grace_seconds、read_repair_chance、speculative_retry、dclocal_read_repair_chance、crc_check_chance

      • 完全兼容的配置项为:compression、default_time_to_live

    • 在表test_user中插入数据。

      INSERT INTO test_user (first_name, last_name) VALUES ('test', 'LINDORM');
      INSERT INTO test_user (first_name, last_name) VALUES ('Zhang', 'San');
      INSERT INTO test_user (first_name) VALUES ('Wu');
    • 查看数据是否成功插入。以下命令不建议在海量数据场景中使用。

      SELECT COUNT(*) FROM test_user; 

      返回以下信息:

        count
      -------     
          3
      
      (1 rows)

      也可以通过以下命令查看插入的具体数据。

      SELECT * FROM test_user;

      返回以下信息:

      first_name | last_name
      ------------+-----------
             test |    LINDORM
               Wu |      null
            Zhang |       San
      
      (3 rows)
    • 删除表test_user中的指定行的last_name列的值,然后查询删除后的表数据。

      DELETE last_name FROM test_user WHERE first_name='test';
      SELECT * FROM test_user WHERE first_name='test';

      返回以下信息:

      first_name | last_name
      ------------+-----------
             test |    null
    • 删除表test_user中指定行的数据,然后查询删除后的表数据。

      DELETE FROM test_user WHERE first_name='test';
      SELECT * FROM test_user WHERE first_name='test';

      返回以下信息:

      first_name | last_name
      ------------+-----------
      
      (0 rows)
    • 清空表或者删除表。只有super用户才能执行TRUNCATE、DROP TABLE、DROP KEYSPACE命令。

      TRUNCATE test_user;
      DROP TABLE test_user;
    • 使用Lindorm SEARCH INDEX。

      通过CQL为Lindorm宽表创建搜索索引,创建搜索索引前需确保表的属性满足创建需求,相关需求请提交工单咨询值班。

      CREATE TABLE test_keyspace.tb (cn1 text PRIMARY KEY, cn2 text, cn3 text) WITH extensions = {'CONSISTENCY_TYPE':'strong', 'MUTABILITY':'MUTABLE_LATEST'};
      CREATE SEARCH INDEX tbidx ON test_keyspace.tb WITH COLUMNS (cn2, cn3);
      REBUILD SEARCH INDEX ON test_keyspace.tb ;
      INSERT INTO test_keyspace.tb (cn1, cn2, cn3) VALUES ('v11', 'v12', 'v13');
      SELECT * FROM test_keyspace.tb WHERE cn2 like '%v1';
      说明

      上述代码表示在表tb中创建索引表tbidx,并写入数据,然后进行模糊查询。相关语法请参见管理搜索索引

    • 使用Lindorm Secondary INDEX。

      通过CQL为Lindorm宽表创建Lindorm Secondary Index,创建前需确保表的属性满足创建需求,相关信息请参考二级索引

      CREATE TABLE test_keyspace.tb (cn1 text PRIMARY KEY, cn2 text, cn3 text) WITH extensions = {'CONSISTENCY_TYPE':'strong', 'MUTABILITY':'MUTABLE_LATEST'};
      CREATE INDEX tbidx ON test_keyspace.tb (cn2);
      INSERT INTO test_keyspace.tb (cn1, cn2, cn3) VALUES ('v11', 'v12', 'v13');
      SELECT * FROM test_keyspace.tb WHERE cn2 = 'v12';