SequoiaDB巨杉資料庫JSON例項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 ;
建立集合空間"sample"
rc = connection.createCollectionSpace ( "sample", SDB_PAGESIZE_4K, collectionspace ) ;
在新建立的集合空間中建立集合"employee"
rc = collectionspace.createCollection ( "employee", collection ) ;
以上建立了一個名字為“sample”的集合空間和一個名字為“employee”的集合,集合空間內的集合的資料頁大小為4k。可根據實際情況選擇不同大小的資料頁。建立集合後,可對集合做增刪改查等操作。
Note:
在建立集合“employee”時並沒有附加分割槽,壓縮等資訊,詳情請查閱 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 ) ;
更多內容可點選巨杉資料庫官網檢視。