我们有cassandra column家族。每一行都有多列。列有名称,但值为空。如果我们有5-10个行键,我们如何找到出现在所有这些键中的列名。例如:
row1: php, programming, accounting
row2: php, bookkeeping, accounting
row3: php, accounting必须返回:
result: php, accounting注意,我们不能轻易地将整行加载到内存中,因为它可能包含1M+列的解决方案,不需要很快。
发布于 2012-08-03 05:05:27
为了做几行的相交,我们需要首先相交其中的两行,然后将结果与第三行相交,依此类推。
看起来在cassandra中,我们可以通过列名查询数据,这是一个相对较快的操作。
所以我们首先得到10k行的列切片。制作列名列表(在PHP Cassa中-将它们放入数组中)。然后从第二行中选择它们。
代码可能如下所示:
$x = $cf->get($first_key, <some column slice>);
$column_names = array();
foreach(array_keys($x) as $k)
$column_names[] = $k;
$result = $cf->get($second_key, $column_slice = null, $column_names);
// write result somewhere, and proceed with next slice发布于 2012-08-03 01:30:55
对列名进行排序,可以为每一行创建一个迭代器(该迭代器一次加载date的一部分,例如10k列)。现在将每个迭代器放入一个优先级队列(按下一个列名)。如果你将具有相同列名的迭代器的k倍作为队列,这是所有行之间的通用名称,在另一种情况下,我们移动到下一个元素并返回迭代器到队列。
发布于 2012-08-03 03:57:28
您可以使用Hadoop map/reduce作业,如下所示:
键:列名{ Count : count }
https://stackoverflow.com/questions/11749846
复制相似问题