数据库
首页 > 数据库> > 「SequoiaDB巨杉数据库」createCL()

「SequoiaDB巨杉数据库」createCL()

作者:互联网

名称

createCL - 创建一个新的集合。

语法

db.collectionspace.createCL(<name>,[options])

类别

Collection Space

描述

在指定集合空间下创建集合(Collection),集合是数据库中存放文档记录的逻辑对象,任何一条文档记录必须属于一个且仅属于一个集合。

参数

Note:

  • 集合名限制请参考限制

  • 当参数 options 内设置了多个参数时,需用英文半角的逗号","将各参数的取值隔开。

  • 创建集合空间时,可以指定所属的数据域。创建集合时,使用 Group 参数,指定的复制组必须在域内;不使用 Group 参数,集合将被创建在域的任意一个复制组上。

  • 创建集合的 AutoSplit 参数比数据域的 AutoSplit 属性优先级更高。

  • AutoSplit 不能与 Group 参数同时使用。

  • AutoSplit 必须配合散列分区使用。

  • 压缩算法选择策略:snappy 压缩算法是以单条记录为单位进行压缩,记录内部的数据重复度直接影响到压缩率。因此,当记录内部数据重复度较高,如每条记录的字段名、字段值相似,使用 snappy 算法可获得良好的压缩性能。如果记录内部数据重复度很低,但记录间具有更高的相似性,如不同记录之间有相同的字段名,相近的字段值等,则使用 lzw 算法更优。

  • LobShardingKeyFormat 只能在主表中使用,同时要求切分键只能有一个切分字段。

返回值

成功:返回一个新的SdbCollection对象。

失败:抛出异常。

错误

createCL()函数常见异常如下:

错误码错误类型描述解决方法
-2SDB_OOM无可用内存。检查物理内存及虚拟内存的情况。
-6SDB_INVALIDARG参数错误。查看参数是否填写正确。
-22SDB_DMS_EXIST集合已存在。检查集合是否存在。
-34SDB_DMS_CS_NOTEXIST集合空间不存在。检查集合空间是否存在。
-318SDB_VALUE_OVERFLOW数值运算出现溢出。检查运算过程是否存在溢出情况。

当异常抛出时,可以通过getLastError()获取错误码, 或通过getLastErrMsg()获取错误信息。 可以参考常见错误处理指南了解更多内容。

版本

v1.0及以上版本。

例子

  1. 在集合空间 sample 下创建集合 employee,不指定分区键。

    > db.sample.createCL("employee")
    localhost:11810.sample.employee
    Takes 0.120450s.

    Copy

  2. 在集合空间 sample 下创建集合 employee。该集合若需要切分数据到其它复制组,将 使用 age 字段进行 hash 切分;该集合默认开启了数据压缩功能,使用默认的 lzw 算法压缩数据;写操作作用于该集合时,只需写入主节点即可返回。

    > db.sample.createCL( "employee",{ ShardingKey:{ age: 1 }, ShardingType: "hash", Partition: 4096, ReplSize: 1 } )
    localhost:11810.sample.employee
    Takes 0.110319s.

    Copy

  3. 在集合空间 sample 下创建集合 employee,开启严格数据类型模式。

    > db.sample.createCL("employee", {StrictDataMode: true})
    localhost:11810.sample.employee
    Takes 0.120450s.

    Copy

  4. 在主表下使用大对象

    • 在集合空间 sample 下创建支持大对象的主集合 maincl,同时关联子表 subcl。
    > db.sample.createCL("maincl", { LobShardingKeyFormat:"YYYYMMDD", ShardingKey:{ date:1 }, IsMainCL:true, ShardingType:"range" } )
    localhost:11810.sample.maincl
    Takes 0.058532s.
    > db.sample.createCL("subcl")
    localhost:11810.sample.subcl
    Takes 0.294612s.
    > db.sample.maincl.attachCL( "sample.subcl", { LowBound: { date: "20190701" }, UpBound: { date: "20190801" } } )
    Takes 0.008561s.

    Copy

    • 在[20190701, 20190801)之间创建的大对象数据则会落在集合 sample.subcl 中
    > Timestamp()
    Timestamp("2019-07-23-18.04.07.539050")
    > db.sample.maincl.putLob('/opt/data/test.dat')
    00005d36dbee370002de8080
    Takes 0.246062s.

    Copy

    • 也可以指定大对象ID的时间属性
    > db.sample.maincl.createLobID("2019-07-23-18.04.07")
    00005d36db97360002de8081
    Takes 0.108365s.
    > db.sample.maincl.putLob('/opt/data/test.dat', '00005d36db97360002de8081')
    00005d36db97360002de8081
    Takes 0.002216s.

    Copy

注意事项

创建主分区集合(对应主表)或是子分区集合(对应子表)之后,在使用主分区集合/子分区集合时需要注意一些特殊情况:

  1. 从主分区集合中执行写操作时,replSize、AutoIncrement 会沿用主分区集合对应的属性。
  2. 从子分区集合中执行写操作时,replSize、AutoIncrement 会沿用子分区集合对应的属性。

例子

验证从主分区集合和子分区集合中执行写操作时,AutoIncrement 属性的对应情况。

创建主分区集合 masterCL,自增字段为:masterID。

    > db.sample.createCL("masterCL",{ IsMainCL: true, ShardingKey: { a: 1 }, ShardingType: "range", AutoIncrement: { Field: "masterID" } })
    localhost:11810.sample.masterCL
    Takes 0.002450s.

Copy

创建子分区集合 slaveCL,自增字段为:slaveID。

    > db.sample.createCL("slaveCL",{ ShardingKey: { b: 1 }, ShardingType: "hash", Partition: 1024, AutoIncrement: { Field: "slaveID" }})
    localhost:11810.sample.slaveCL
    Takes 0.263536s.

Copy

将子分区集合附加到主分区集合中。

    > db.sample.masterCL.attachCL( "sample.slaveCL", { LowBound: { a: 0 }, UpBound: { a: 100 } } )
    Takes 0.002743s.

Copy

从主分区集合 masterCL 中插入数据 {"a":1} 时,AutoIncrement 会沿用主分区集合对应的属性,所以数据会带有 masterID 信息 。从子分区集合 slaveCL 中插入数据 {"a":2} 时,AutoIncrement 会沿用子分区集合的属性,所以数据会带有 slaveID 信息。

    > db.sample.masterCL.insert({"a":1}) //主分区集合插入数据
    Takes 0.001877s.
    > db.sample.slaveCL.insert({"a":2}) //子分区集合插入数据
    Takes 0.001238s.
    > db.sample.masterCL.find() //查看结果
    {
      "_id": {
        "$oid": "5d42b40d2d7dfa6391e3cbd9"
      },
      "a": 1,
      "masterID": 1
    }
    {
      "_id": {
        "$oid": "5d42b4342d7dfa6391e3cbda"
      },
      "a": 2,
      "slaveID": 1
    }
    Return 2 row(s).
    Takes 0.001234s.
    > 

Copy

相关文章请点击阅读

「SequoiaDB巨杉数据库」alter() 

集合的其他属性,如 ShardingKey、Compressed、AutoIndexId 等,子分区集合会使用自己的属性而不是沿用主分区集合的对应属性。

标签:SequoiaDB,Takes,分区,db,sample,createCL,巨杉,集合,true
来源: https://blog.csdn.net/lysen_/article/details/115332768