2011年4月15日 星期五

初探 Cassandra

手邊工作告一段落,又回過頭來學習 Cassandra。

研究的主題是用來作為 Client 的 PHP 服務,一開始使用一個叫作「phpcassa」的東東,但是怎麼就是無法使用。後來發覺似乎是 Cassandra 服務本身有問題,所以只好暫時作罷。這次則是用官網最近才列出來另一個叫「SimpleCassie」的東東。

同事已經幫我把 Cassandra 服務架好,也編譯完 PHP 和 Cassandra 溝通所使用的「Thrift」模組。Thrift 是一個同樣由 Apache 協會提供,作為服務之間溝通的模式。Cassandra 提供設定讓人修改成 PHP 或是其它語言的版本。而無論是 phpcassa 和 SimpleCassie 都是建置在 Thrift 之上,兩者在程式層級上只是函數庫而已。

一開始把範例貼到測試站後,卻怎麼都不能執行,還出現服務版本過舊的問題。猜想可能是範例程式碼中用的 keyspace, column family 是不存在,導致出現其它錯誤,產生不相干的錯誤訊息。因此就把程式碼刪掉,一行一行加回去。這才確定我的猜想可能是正確。

SimpleCassie 並沒有提供什麼完善的說明文件,只有一個告訴人如何存取資料程式碼範例,看遍 100 多行的程式,就是沒有找到 keyspace 或是 column family 列表相關函數,這總不能叫我自己去猜一個剛架好的 Cassandra 由面有些什麼東西吧!

只好回頭去查 Cassandra 的管方文件,利用 Cassandra 套件所提供的工具 cassandra-cli ,連到同一台主機的 Cassandra 服務,照著 help 的說明,再參考官方文件對於資料結構的說明,倒是成功的作出一個 keyspace 和 column family 。

回到  PHP 之後就順利許多,加入、修改,以及讀出資料的功能都一一被試出來。和資料庫不同的是,讀出來的資料是一個 Object 而不是如關連資料庫直接取得裡面值,看來需要一些時間習慣。

測試中發現一個滿奇怪的現象,在命令列使用 cassandra-cli 所編輯過的資料,以 PHP 的 SimpleCassie 是無法修改、刪除,而被 cassandra-cli 刪除的資料,也無法由 SimpleCassie 使用同一個 key 值新增回來。但是兩者在現階段都沒有使用帳號登入,表示權限理論上應該一樣才是。這點就變成權限問題,有待之後把帳號、權限建立起來後才研究的部分。

沒有留言:

張貼留言