下述以名为“datasource”的数据源为例介绍数据源的搭建及使用步骤。该数据源与协调节点地址为 sdbserver1:11810
的集群建立交互通道,且 sdbserver1 中源集群的鉴权用户名为“sdbadmin”,用户密码为“sdbadmin”。
创建名为“datasource”的数据源
> db.createDataSource("datasource", "sdbserver1:11810", "sdbadmin", "sdbadmin")
Note:
创建数据源的详细参数说明可参考 createDataSource()。
用户可通过 listDataSources() 或数据源列表查看数据源的元数据信息。
> db.listDataSources()
Note:
元数据信息字段说明可参考 SYSDATASOURCES 集合。
用户可以通过创建集合空间或集合时与数据源建立映射,实现跨集群的数据访问。在集合空间上使用数据源时,可以访问被映射集合空间下的所有集合,实现跨集群的多集合数据访问;在集合上使用数据源时,可以实现跨集群的单集合数据访问。
创建集合空间
创建集合空间 sample 并关联数据源 datasource 的集合空间 sample1
> db.createCS("sample", {DataSource: "datasource", Mapping: "sample1"})
Note:
集合空间使用数据源建立映射后,不支持在该集合空间下创建集合。
创建集合
创建集合 sample2.employee 并关联数据源 datasource 的同名集合
> db.sample2.createCL("employee", {DataSource: "datasource"})
创建集合 sample2.employee 并关联数据源 datasource 的集合 sample2.employee1
> db.sample2.createCL("employee", {DataSource: "datasource", Mapping: "employee1"})
创建集合 sample2.employee 并关联数据源 datasource 的集合 sample3.employee1
> db.sample2.createCL("employee", {DataSource: "datasource", Mapping: "sample3.employee1"})
Note:
- 创建集合或集合空间时,如果映射同名集合或集合空间,则不需要指定 Mapping 参数。
- 主集合和分区集合不支持使用数据源。
- 使用了数据源的集合可作为子集合挂载到主集合,但使用了同一数据源的集合在相同主集合下只能挂载一个
查看集合空间信息
通过编目节点查看使用了数据源的集合空间信息
> var cata = new Sdb("sdbserver", 11800) > cata.SYSCAT.SYSCOLLECTIONSPACES.find()
输出结果如下:
{ "_id": { "$oid": "5ffc2f0072e60c4d9be30c4d" }, "Name": "sample", "UniqueID": 1, "CLUniqueHWM": 4294967296, "PageSize": 65536, "LobPageSize": 262144, "Type": 0, "DataSourceID": 1, "Mapping": "sample1", "Collection": [] }
查看集合信息
通过编目快照查看使用了数据源的集合信息
> db.snapshot(SDB_SNAP_CATALOG)
输出结果如下:
{ "_id": { "$oid": "5ffc313972e60c4d9be30c4f" }, "Name": "sample2.employee", "UniqueID": 8589934593, "Version": 1, "Attribute": 1, "AttributeDesc": "Compressed", "CompressionType": 1, "CompressionTypeDesc": "lzw", "CataInfo": [ { "GroupID": -2147483647, "GroupName": "DataSource" } ], "DataSourceID": 1, "Mapping": "sample2.employee" }
假设本地集群中集合 sample.employee 与源集群的集合 sample2.employee 建立映射,且集合 sample2.employee 存在如下记录:
{"name": "Sam", "age": 26} {"name": "Tom", "age": 30} {"name": "Mike", "age": 24}
通过本地集群检查数据是否正确
> db.sample.employee.find()
通过集合 sample.employee 对源集群插入新数据
> db.sample.employee.insert({"name": "Jack", "age": 32})
在 sdbserver1 中检查源集群对应集合的数据是否更改
> db.sample2.employee.find()
输出结果如下,源集群中对应数据已更改:
{ "_id": { "$oid": "606529276a1169200b8c6c41" }, "name": "Sam", "age": 26 } { "_id": { "$oid": "606529326a1169200b8c6c42" }, "name": "Tom", "age": 30 } { "_id": { "$oid": "606529456a1169200b8c6c43" }, "name": "Mike", "age": 24 } { "_id": { "$oid": "60652ee96a1169200b8c6c44" }, "name": "Jack", "age": 32 } Return 4 row(s).
更多操作可参考
操作 | 说明 |
---|---|
db.dropCS() | 删除映射集合空间 只会删除本地集群的元数据,不会删除作为数据源集群中的集合空间 |
db.collectionspace.dropCL() | 删除映射集合 只会删除本地集群的元数据,不会删除作为数据源集群中的集合 |
datasource.alter() | 修改数据源的元数据信息 |
db.dropDataSource() | 删除指定数据源 |