-
文档
-
关于 SequoiaDB
安装
系统要求
安装部署
基本操作
数据模型
SQL引擎
PostgreSQL实例组件
MySQL实例组件
FileSystem引擎
S3引擎
系统架构
编目节点
分区组
数据库管理
特殊配置项修改
数据库工具
集群启停
集群扩容
备份恢复
日志归档重放
监控
快照
列表
安全
查询访问计划
基于代价的访问计划评估
查看访问计划
统计信息
连接器
驱动
C驱动
C++驱动
CSharp驱动
Java开发驱动
PHP驱动
Python驱动
REST接口
参考手册
SequoiaDB Shell方法
概述
Global
Sdb
SdbCS
SdbCollection
SdbCursor
SdbQuery
SdbReplicaGroup
SdbNode
SdbDomain
Oma
File
FileContent
Cmd
Remote
Hash
IniFile
Sdbtool
Ssh
System
辅助类型对象
特殊类型对象
操作符
匹配符
选择符
函数操作
更新符
聚集符
SQL语法
语句
子句
函数
监控视图
故障排除
常见错误
SAC 管控中心
安装与登录
部署
主机操作
存储集群操作
MySQL 实例操作
PostgreSQL 实例操作
监控
配置
SequoiaDB 数据操作
集合空间
集合
索引
记录
PostgreSQL 实例数据操作
MySQL 实例数据操作
Web服务
C++开发基础
这里介绍如何使用 C++ 客户端驱动接口编写使用 SequoiaDB 数据库的程序。为了简单起见,下面的示例不全部是完整的代码,只起示例性作用。可到 /sequoiadb/client/samples/CPP 下获取相应的完整的代码。更多查看 C++ API
数据库操作
连接数据库:connect.cpp 演示如何连接到数据库。文件应当包含“client.hpp”头文件及使用命名空间 sdbclient。
#include <iostream> #include "client.hpp" using namespace std ; using namespace sdbclient ; // Display Syntax Error void displaySyntax ( CHAR *pCommand ) ; INT32 main ( INT32 argc, CHAR **argv ) { // verify syntax if ( 5 != argc ) { displaySyntax ( (CHAR*)argv[0] ) ; exit ( 0 ) ; } // read argument CHAR *pHostName = (CHAR*)argv[1] ; CHAR *pPort = (CHAR*)argv[2] ; CHAR *pUsr = (CHAR*)argv[3] ; CHAR *pPasswd = (CHAR*)argv[4] ; // define local variable sdb connection ; INT32 rc = SDB_OK ; // connect to database rc = connection.connect ( pHostName, pPort, pUsr, pPasswd ) ; if( rc!=SDB_OK ) { cout << "Fail to connet to database, rc = " << rc << endl ; goto error ; } else cout << "Connect success!" << endl ; done: // disconnect from database connection.disconnect () ; return 0 ; error: goto done ; } // Display Syntax Error void displaySyntax ( CHAR *pCommand ) { cout << "Syntax:" << pCommand << " <hostname> <servicename> <username> <password> " << endl ; }
在 Linux下,可以如下编译及链接动态链接库文件 libsdbcpp.so:
$ g++ -o connect connect.cpp -I <PATH>/sdbdriver/include -lsdbcpp -L <PATH>/sdbdriver/lib 执行结果如下: $ ./connect localhost 11810 "" "" Connect success!
Note:
本例程连接到本地数据库的11810端口,使用的是空的用户名和密码。用户需要根据自己的实际情况配置参数。譬如:
./connect localhost 11810 "sequoiadb" "sequoiadb"
。当数据库已经创建用户时,应该使用正确的用户及密码连接到数据库,否则连接失败。创建集合空间和集合
首先,定义集合空间,集合对象。
sdbCollectionSpace collectionspace ; sdbCollection collection ;
创建集合空间"foo"
rc = connection.createCollectionSpace ( "foo", SDB_PAGESIZE_4K, collectionspace ) ;
在新建立的集合空间中创建集合"bar"
rc = collectionspace.createCollection ( "bar", collection ) ;
以上创建了一个名字为“foo”的集合空间和一个名字为“bar”的集合,集合空间内的集合的数据页大小为4k。可根据实际情况选择不同大小的数据页。创建集合后,可对集合做增删改查等操作。
Note:
在创建集合“bar”时并没有附加分区,压缩等信息,详情请查阅 C++ API
插入数据:insert
首先,需要创建一个插入的 bson 对象。
BSONObj obj ; obj = BSON ( "name" << "tom" << "age" << 24 ) ;
接着,把此 bson 对象插入集合中
collection.insert ( obj ) ;
obj 为输入参数,为要插入的数据。
查询:query
定义一个游标对象
sdbCursor cursor ;
查询所有记录,并把查询结果放在游标对象中
collection.query ( cursor ) ;
从游标中显示所有记录
while( !( rc=cursor.next( obj ) ) ) { cout << obj.toString() << endl ; }
查询操作需要一个游标对象存放查询的结果到本地。要获得查询的结果需要使用游标操作。本例使用了游标操作的 next 接口,表示从查询结果中取到一条记录。此示例中没有设置查询条件,筛选条件,排序情况,及仅使用默认索引。
创建索引:index
# define INDEX_NAME "index"
首先创建一 BSONObj 对象包含将要创建的索引的信息
BSONObj obj ; obj = BSON ( "name" << 1 << "age" << -1 ) ;
创建一个以"name"为升序,"age"为降序的索引
collection.createIndex ( obj, INDEX_NAME, FALSE, FALSE ) ;
集合对象 collection 中创建一个以"name"为升序,"age"为降序的索引。
更新:update
先创建一个包含更新规则的 BSONObj 对象
BSONObj rule = BSON ( "$set" << BSON ( "age" << 19 ) ) ;
打印出更新规则
cout << rule.toString() << endl ;
更新记录
collection.update( rule ) ;
在集合对象 collection 中更新了记录。示例中没有指定数据匹配规则,所以此示例将更新集合中所有的记录。
集群操作
分区组操作
分区组操作包括创建分区组(sdb:createReplicaGroup),得到分区组实例(sdb:getReplicaGroup),启动分区组所有数据节点(sdbReplicaGroup::start),停止分区组所有数据节点(sdbReplicaGroup::stop)等。
以下为分区组操作示例性的例子。真正的应用应包括错误检测等。
定义一个分区组实例
sdbReplicaGroup rg ;
定义创建节点需要使用的配置项,此处定义一个空的配置项,表示使用默认配置
BSONObj conf ;
先建立一个编目分区组
connection.createCataReplicaGroup ( "ubuntu-dev1", "30000", "/opt/sequoiadb/database/catalog/30000", conf ) ;
创建数据分区组
connection.createRG ( "dataGroup1", rg ) ;
创建第一个数据节点
rg.createNode ( "ubuntu-dev1", "40000", "/opt/sequoiadb/database/data/40000", conf ) ;
启动分区组
rg.start () ;
数据节点操作
数据节点操作包括创建数据节点(sdbReplicaGroup::createNode),得到主数据节点(sdbReplicaGroup::getMaster),得到从数据节点(sdbReplicaGroup::getSlave),启动数据节点(sdbNode::start),停止数据节点(sdbNode::stop)等。
以下为数据节点操作示例性的例子。真正的应用应包括错误检测等。
定义一个数据节点实例
sdbNode masternode ; sdbNode slavenode ;
获取主数据节点
rg.getMaster( masternode ) ;
获取从数据节点
rg.getSlave( slavenode ) ;