C/C++開發Cassandra的一些經驗

來源:互聯網
上載者:User

標籤:log   搜尋   expect   automake   拷貝   tar   基礎   系統內容   接下來   

一 前言

在項目將Cassandra作為備選環境之後,就開始考慮用C/C++進行開發。根據資料,目前Cassandra的C/C++介面,主要有thrift和libcassandra兩種,官方網址分別為:

thrift: https://github.com/packaged/cassandrathrift

libcassandra:http://datastax.github.io/cpp-driver/

 

二 C/C++的thrift API

一開始我們採用的是thrift介面,畢竟thrift提供了多語言的相同介面。Cassandra安裝、編譯thrift介面也算簡單,作為生手的我用一兩個小時搞定了,具體可參見:

 《cassandra的c++ driver》: http://blog.chinaunix.net/uid-12023855-id-3431018.html

但在開發時,卻遇到了很頭疼的麻煩,即“Exception: Default TException.  [Expected 4 or 0 byte int (1)]

在搜尋到這篇部落格:《關於Cassandra與Thrift在int/text/varint上的曖昧》後,因不能將表的clolumn類型由int修改為text或varint,只能放棄thrift。

私下以為,cassandra對類型匹配要求很嚴格,而提供的thrift介面卻均以text為基礎類型,是不是說明cassandra官方其實並不重視這種方式?

當然,如果環境中column的類型都可改為text,或者對thrift本省很熟悉,還是可以繼續在這條路走下去的。

 

三 libcassandra編譯安裝

接下來重點介紹libcassandra,在CentOS的編譯安裝步驟如下:

  • 安裝依賴包

sudo yum install automake cmake gcc-c++ git libtool openssl-devel

  • 編譯安裝libuv

從github(https://github.com/libuv/libuv/tree/v1.x)下載最新的源碼安裝包libuv-1.x.zip:

unzip libuv-1.x.zip

cd libuv-1.x

sh ./autogem.sh

./configure

sudo make install

  • 修改連結庫目錄

libuv(以及其它編譯安裝的庫)的預設安裝目錄為/usr/local/lib,不在系統的預設搜尋範圍內。有兩種方式修改,一種是設定系統內容參數LD_LIBRARY_PATH,另一種是修改設定檔/etc/ld.so.conf,這裡採用第二種。

sudo echo "/usr/local/mysql/lib" >> /etc/ld.so.conf

sudo ldconfig

  • 編譯安裝cpp-driver

從github(https://github.com/datastax/cpp-driver)下載最新的源碼安裝包cpp-driver-master.zip:

unzip cpp-driver-master.zip

cd cpp-driver-master

cmake .

make

  • 產生的標頭檔和共用庫檔案在本目錄,最好拷貝到/usr/local/相應目錄下:

cp ./libcassandra* /usr/local/lib

cp ./include/cassandra.h /usr/local/include/

 

四 開發時注意事項

  • 標準C類型的API

libcassandra的API都以標準C的結構和函數形式提供,而不是C++形式的類和方法。不過與thrift形式的介面相比,libcassandra的API與Java API更相似,開發時可參考Java API找到相應的函數,再按cassandra.h的說明進行改造。

  • 避免記憶體流失

libcassandra使用的大多數結構,除少數,使用完後都必須釋放記憶體,因此必須重視以避免造成記憶體流失。

  • 類型嚴格匹配

這點與在Java API一致,在bind和get時,參數與列類型是嚴格匹配的,不允許隱式的類型轉換(例如int32與int64),務必引起重視。

先寫這麼多,範例程式碼以後補上。

C/C++開發Cassandra的一些經驗

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.