lindorm-cqlsh是lindorm团队基于Cassandra cqlsh 修改后提供的shell,提供windows以及类Unix版本。用户可以在本地或阿里云ECS上下载lindorm-cqlsh安装包,通过cqlsh工具可以完全兼容的访问Lindorm。

下载和安装cqlsh

到lindorm-cqlsh 的下载链接下载最新版本的 lindorm-cqlsh安装包然后解压,即可完成安装。

启动cqlsh

使用Lindorm控制台查看CQL访问方式的地址和账户密码,其中端口默认是9042,然后使用如下命令连接Lindorm:

bin/cqlsh $host $port -u $username -p $password

$host填写访问的ip地址,$port填写9042端口(如果不填系统默认9042),如果您需要经常连接到特定节点,您可以将节点的地址和端口信息保存到环境变量 $CQLSH_HOST 和 $CQLSH_PORT 中。更多关于 cqlsh 命令支持的参数可以使用 bin/cqlsh -help。

基本cqlsh命令

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

通过 cqlsh 创建 keyspace

Lindorm 兼容Cassandra中的keyspace和关系型数据库中的database概念比较类似,一个 keyspace 可以包含一个或多个 tables 或 column families。当您启动 cqlsh 时没有指定 keyspace,那么命令提示符为 cqlsh>,您可以使用 CREATE KEYSPACE 命令来创建 keyspace,具体如下:

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

对于Lindorm用户来说CREATE KEYSPACE 概念中的strategy 、replication_factor和 Cassandra中的概念类似,但是replication_factor 默认都是2,上述建完KEYSPACE 后可以通过DESCRIBE KEYSPACE 来查看keyspace的信息。

cqlsh> DESCRIBE KEYSPACE  test_keyspace;
cqlsh> CREATE KEYSPACE test_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;

现在您可以使用 USE 命令来切换到这个 keyspace :

cqlsh> USE test_keyspace;
cqlsh:test_keyspace>

通过 cqlsh 创建表

cqlsh> use test_keyspace;
cqlsh:test_keyspace> CREATE TABLE test_user (first_name text , last_name text, PRIMARY KEY (first_name)) ;

上述命令表示在 test_keyspace 下面创建了一张名为 test_user 的表。其中包含了 first_name 和 last_name 两个字段,类型都是 text,并且 first_name 是这张表的 PRIMARY KEY。当然,您也可以通过下述命令在 test_keyspace 里面建表

cqlsh> CREATE TABLE test_keyspace.test_user(first_name text , last_name text, PRIMARY KEY (first_name)) ;

查看该表的schema信息:

cqlsh:test_keyspace> 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';
cqlsh:test_keyspace>

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

其他配置长期会和CQL属性完全兼容,现阶段如下属性完全兼容:

compression:支持LZ4/SNAPPY/ZSTD
default_time_to_live:支持表级别TTL

通过 cqlsh 读写数据

往表里面插入一些数据:

cqlsh:test_keyspace> INSERT INTO test_user (first_name, last_name) VALUES ('test', 'LINDORM');
cqlsh:test_keyspace> INSERT INTO test_user (first_name, last_name) VALUES ('Zhang', 'San');
cqlsh:test_keyspace> INSERT INTO test_user (first_name) VALUES ('Wu');

上述语句表示往 test_user 表中插入三条数据,其中最后一条数据只指定了 key,last_name 没有值。您可以使用 SELECT COUNT 语句查看数据是否插入成功,但是SELECT COUNT 不建议在海量数据上使用。

cqlsh:test_keyspace> SELECT COUNT(*) FROM test_user; 

  count
-------     
    3

(1 rows)

通过命令的输出查看已成功插入数据。您还可以使用下述命令查询这条数据:

cqlsh:test_keyspace> SELECT * FROM test_user;

first_name | last_name
------------+-----------
       test |    LINDORM
         Wu |      null
      Zhang |       San

(3 rows)
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name='test';

first_name | last_name
------------+-----------
       test |    LINDORM

(1 rows)

删除列或行

使用 DELETE 命令删除一些列。例如,删除 last_name 列:

cqlsh:test_keyspace> DELETE last_name FROM test_user WHERE first_name='test';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name='test';

first_name | last_name
------------+-----------
       test |    null

使用 DELETE 命令删除一整行的数据:

cqlsh:test_keyspace> DELETE FROM test_user WHERE first_name='test';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name='test';

 first_name | last_name
------------+-----------

(0 rows)
cqlsh:test_keyspace>

清空或删除表

如果您需要清空一张表,您可以使用 TRUNCATE 命令或 DROP TABLE 命令,只有super 用户可以具备truncate 和 drop keyspace/table 权限,例如:

cqlsh:test_keyspace> TRUNCATE test_user;
cqlsh:test_keyspace> DROP TABLE test_user;

使用Lindorm SEARCH INDEX

通过CQL为对Lindorm表创建Lindorm Search index,但是在创建前需要保证对应表的属性满足创建需要,具体属性的解释可以在lindorm-cqlsh安装包下面的doc文档里,通过CQL.html网页CREATE TABLE options项目查看,也可以咨询值班.

下面的例子表示的是,创建带有CONSISTENCY_TYPE 以及MUTABILITY属性的表,并创建SEARCH INDEX ,写入数据,并进行模糊查询。具体相关细节参考“企业特性”下的“全文索引”小节。

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

使用Lindorm Secondary Index

通过CQL为Lindorm表创建Lindorm Secondary Index,同Search Index一样,创建前需要设置表的属性,满足创建需要,细节参考Secondary Index介绍。

Lindorm CQL 的使用限制会比Cassandra CQL 的限制要低很多,具体使用参考“企业特性”下面“高性能原生二级索引”小节。

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