天天看點

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 << " &lt;hostname&gt;  &lt;servicename&gt;  &lt;username&gt;  &lt;password&gt; " << endl ;
      }
               
    在 Linux下,可以如下編譯及連結動态連結庫檔案 libsdbcpp.so:
    $ g++ -o connect connect.cpp -I &lt;PATH&gt;/sdbdriver/include -lsdbcpp -L &lt;PATH&gt;/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 ) ;
               

更多内容可點選巨杉資料庫官網檢視。