2012-03-05 98 views

回答

1

您可能能夠通過使get_range要求用隨機start密鑰(只是一個隨機字符串)要做到這一點,和1

從內存row_count,我覺得finish鍵將需要與start相同,以便查詢'環繞'密鑰空間;這通常會返回全部行,但row_count會限制這一點。

還沒有嘗試過,但這應該可以確保您獲得單一結果而不必知道確切的行鍵。

+0

正如我可以告訴這將返回隨機行,但始終是相同的...猜猜有沒有簡單的解決方案,使用卡桑德拉... – 2012-03-05 14:05:38

+1

你需要每次都用一個新的隨機啓動鍵不斷調用'get_range'。 ..這應該從密鑰空間環上的一個隨機點中選擇一行。 – DNA 2012-03-05 14:18:08

+0

謝謝!這就是我一直在尋找... – 2012-03-05 14:58:36

0

不確定你的意思是隨機行。如果你的意思是隨機存取行,那麼確定你可以很容易地做到這一點:

import pycassa.pool 
import pycassa.columnfamily 

pool = pycassa.pool.ConnectionPool('keyspace', ['localhost:9160'] 
cf = pycassa.columnfamily.ColumnFamily(pool, 'cfname') 
row = cf.get('row_key') 

這會給你任何一行。如果你的意思是你想要一個隨機選擇的行,我不認爲你會很容易做到這一點,而不知道密鑰是什麼。您可以生成一個索引行,然後從中選擇一個隨機列,並使用它從另一個列族中獲取一行。基本上,您需要創建一個新行,其中每個列值都是您嘗試選擇行的列族的行鍵。然後,您可以從該行隨機選取一列,並將密鑰設置爲隨機行。

我不認爲pycassa提供任何支持來抓取一個隨機的,非索引的行。

+0

具體地說:我實際上意味着隨機選擇行.. – 2012-03-05 14:05:04

0

這適用於我的情況:

ini = random.randint(0, 999999999) 
rows = col_fam.get_range(str(ini), row_count=1, column_count=0,filter_empty=False) 

你必須去適應你的行密鑰類型(在我的案件串)