1. 程式人生 > 其它 >SequoiaDB巨杉資料庫JSON例項C++開發基礎

SequoiaDB巨杉資料庫JSON例項C++開發基礎

技術標籤:巨杉資料庫學習資料庫jsonc++

本篇將介紹如何使用 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 ) ;
    

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