本章节主要介绍KEYSPACE、TABLE、SECONDARY INDEX和SEARCH INDEX的语法。

Lindorm CQL将数据存储在表中,其模式定义了表中所述数据的布局,并且这些表被分组在键空间中。keyspace定义了许多选项,这些选项适用于它包含的所有table,其中最主要的是keyspace使用的复制策略,这里Lindorm CQL并不支持keyspace的复制策略定义,以及副本数的定义,都是默认定义的值。Lindorm CQL支持使用CQL语言操作Lindorm高性能二级索引以及Lindorm全文索引Search Index,满足用户对于索引的使用需求。

keyspace和Table的语法定义

Lindorm CQL Keyspace语法定义:
keyspace_name ::=  name
name          ::=  unquoted_name | quoted_name
unquoted_name ::=  re('[a-zA-Z_0-9]{1, 48}')
quoted_name   ::=  '"' unquoted_name '"'
Lindorm CQL Table语法定义:
table_name    ::=  [ keyspace_name '.' ] name
name          ::=  unquoted_name | quoted_name
unquoted_name ::=  re('[a-zA-Z_0-9]{1, 48}')
quoted_name   ::=  '"' unquoted_name '"'

keyspace和table名都应由字母、数字、字符组成,不能为空,并且大小不得超过48个字符。该限制主要是为了避免文件名(可能包括keyspace和table名)超过某些文件的限制系统。

对于Lindorm CQL而言,默认情况下,keyspace name和表名不区分大小写,比如myTable和mytable意义一样,但是可以使用双引号强制进行区分,例如myTable和mytable意义不一样。

此外,表始终是keyspace的一部分,并且表名可以由keyspace名进行强制限定,比如:键空间ks和键空间gs都具有表table,但是他们是不同的表名:ks.table和gc.table不是一张表。

索引

Lindorm CQL同时支持二级索引和基于搜索引擎的SEARCH INDEX。

  • 二级索引
    Lindorm CQL支持在表上创建二级索引,从而允许查询表时使用这些索引。二级索引由以下名称定义:
    index_name ::=  re('[a-zA-Z_0-9]+')

    如果要使用高性能二级索引,请参考高性能原生二级索引

  • SEARCH INDEX
    SEARCH INDEX支持的功能如下:
    • 多维查询。给定多个列的随机组合,快速返回查询结果。
    • 排序。提供order by能力,返回结果按照任意指定列进行排序。
    • 模糊匹配。

    如果您想要通过Lindorm CQL使用SEARCH INDEX,需要先在Lindorm上开通全文检索以及LTS服务,具体请参考全文索引