2012-08-23 50 views
0

我寫了libQtCassandra,當前版本不支持超級列。不添加支持的一個原因是,它打破了庫使用的方案,以便用戶使用數組運算符([])訪問和寫入數據。你會如何支持libQtCassandra庫中的超級列?

如果你不熟悉,圖書館讓我們創建一個「上下文」(到卡桑德拉羣集的連接),從上下文你可以寫這樣的事情:

// set value 123 in "column name" of "row key" of "column family": 
context["column family"]["row key"]["column name"] = 123; 
// retrieve that value: 
int value = context["column family"]["row key"]["column name"]; 

所以...很簡單。但是,如果我們引入超級列,我們再添加一個數組訪問權限,這取決於是否存在超級列。你會怎麼做?

你會使用函數來訪問超級列嗎?

context["column family"]["row key"].sc("super column")["column name"] = 123; 

或者你會使超級列與其他參數一樣無縫工作嗎?

context["column family"]["row key"]["super column"]["column name"] = 123; 

很明顯系統(列族)知道什麼是什麼。因此,無論採用哪種方式都很容易實現,只是它使得庫支持超級列的數組語法要複雜得多。

我有另一個想法是添加一個對象,可以在指定行時使用。但是這看起來相當難看:

context["column family"][sc("row key", "super column")]["column name"] = 123; 

這很容易實現,但在看最終代碼時看起來不太好。

對於這樣一個問題,什麼會是更加stl或boost的方法?

回答

2

好像引入超列支持只會繼續鼓勵使用已棄用的功能。使用複合材料等替代方法是解決將人推向超級柱的問題的更好方法。我不確定這種努力實際上不會是一個錯誤方向的運動。同時,如果人們必須從C++應用程序訪問超級列,他們可以使用Thrift來完成。

所以我的建議是討論一種在libQtCassandra中添加複合支持的方法,因爲它目前似乎不存在。通過這種方式,我們鼓勵用戶通過提供更容易訪問正確結構的方式來進行更明智的數據模型選擇。

+0

啊......我知道超級專欄在卡桑德拉是一種黑客攻擊,但我不知道他們將被棄用。我讀到的最後一件事情是相反的:它們將會更好地實現(不是將所有數據保存在列中,而是手動處理單元數據的加載形式),它將作爲單獨的單獨處理對象)。無論如何...我會改爲查看組合列功能,並單獨保留超級列。如果它已被棄用,肯定不值得付出努力! –