2012-03-05 92 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) 

你必须去适应你的行密钥类型(在我的案件串)