本篇将介紹如何使用 C++ 用戶端驅動接口編寫使用 SequoiaDB 資料庫的程式。為了簡單起見,下面的示例不全部是完整的代碼,隻起示例性作用。可到 /sequoiadb/client/samples/CPP 下擷取相應的完整的代碼。更多檢視 C++ API
資料庫操作
- 連接配接資料庫:connect.cpp 示範如何連接配接到資料庫。檔案應當包含“client.hpp”頭檔案及使用命名空間 sdbclient。
在 Linux下,可以如下編譯及連結動态連結庫檔案 libsdbcpp.so:#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 ; }
$ 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"
-
建立集合空間和集合
首先,定義集合空間,集合對象。
建立集合空間"sample"sdbCollectionSpace collectionspace ; sdbCollection collection ;
在建立立的集合空間中建立集合"employee"rc = connection.createCollectionSpace ( "sample", SDB_PAGESIZE_4K, collectionspace ) ;
以上建立了一個名字為“sample”的集合空間和一個名字為“employee”的集合,集合空間内的集合的資料頁大小為4k。可根據實際情況選擇不同大小的資料頁。建立集合後,可對集合做增删改查等操作。rc = collectionspace.createCollection ( "employee", collection ) ;
Note:
在建立集合“employee”時并沒有附加分區,壓縮等資訊,詳情請查閱 C++ API
-
插入資料:insert
首先,需要建立一個插入的 bson 對象。
接着,把此 bson 對象插入集合中BSONObj obj ; obj = BSON ( "name" << "tom" << "age" << 24 ) ;
obj 為輸入參數,為要插入的資料。collection.insert ( obj ) ;
-
查詢:query
定義一個遊标對象
查詢所有記錄,并把查詢結果放在遊标對象中sdbCursor cursor ;
從遊标中顯示所有記錄collection.query ( cursor ) ;
查詢操作需要一個遊标對象存放查詢的結果到本地。要獲得查詢的結果需要使用遊标操作。本例使用了遊标操作的 next 接口,表示從查詢結果中取到一條記錄。此示例中沒有設定查詢條件,篩選條件,排序情況,及僅使用預設索引。while( !( rc=cursor.next( obj ) ) ) { cout << obj.toString() << endl ; }
- 建立索引:index
首先建立一 BSONObj 對象包含将要建立的索引的資訊# define INDEX_NAME "index"
建立一個以"name"為升序,"age"為降序的索引BSONObj obj ; obj = BSON ( "name" << 1 << "age" << -1 ) ;
集合對象 collection 中建立一個以"name"為升序,"age"為降序的索引。collection.createIndex ( obj, INDEX_NAME, FALSE, FALSE ) ;
-
更新:update
先建立一個包含更新規則的 BSONObj 對象
列印出更新規則BSONObj rule = BSON ( "$set" << BSON ( "age" << 19 ) ) ;
更新記錄cout << rule.toString() << endl ;
在集合對象 collection 中更新了記錄。示例中沒有指定資料比對規則,是以此示例将更新集合中所有的記錄。collection.update( rule ) ;
叢集操作
-
分區組操作
分區組操作包括建立分區組(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 ) ;
更多内容可點選巨杉資料庫官網檢視。