1

我们如何在 CQL3 中处理数百万列?我们有一个特殊的表,其中所有行基本上都是复合键并且非常宽。

我正在阅读这个暗示两种方式的问题 CQL3 中的集合是否有某些限制?

此外,我们的复合键的类型是 String.bytes 并按 STring 排序

我们有一个精确匹配的表,它是 Decimal.bytes 并按十进制排序。

在 CQL3 中如何处理这个问题?

谢谢,院长

4

2 回答 2

1

“哦,我的部分问题丢失了,因为 SO 将其格式化为不可能。我正在寻找 Decimal.bytes 和 String.bytes 作为我的复合键......没有“值”,只有一个列名和我希望所有列都是十进制 > 10 和十进制 < 20 可以这么说,列名 = 10 出现多次,如 10.a、10.b 11.c、11.d、11.e"

CREATE TABLE widerow
(    
   row_key text, //whatever
   column_composite1 decimal,
   column_composite2 text,
   PRIMARY KEY(row_key,column_composite1,column_composite2)
)

SELECT * FROM widerow WHERE row_key=... 
AND column_composite1>=10.0
AND column_composite1<=20.0

在这种情况下,您可以使用 column_composite1 上的范围进行查询,并且对于每个 column_composite1,column_composite2 的不同值(10.a、10.b 11.c、11.d、11.e...)

“在该用例中,如何获取 row_composite1 > "a" 和 row_composite1 < "b" 的所有列?即,我不关心复合名称的后半部分。”

这里有2个可能的解决方案

  1. 使 row_composite1 成为列的复合组件
  2. 使用 OrderPreservingPartitioner(确实强烈建议不要这样做)

对于解决方案 1

 CREATE TABLE widerow
    (    
       fake_row_key text, //whatever
       column_composite1 text, // previously row_composite1
       column_composite2 decimal,
       column_composite3 text,
       PRIMARY KEY(row_key,column_composite1,column_composite2,column_composite3)
    )

SELECT * FROM widerow WHERE row_key=... 
AND column_composite1>='a'
AND column_composite1<='b'

这种建模虽然有一些缺点。为了能够对 DOUBLE 值进行范围查询,您需要首先提供 column_composite1:

SELECT * FROM widerow WHERE row_key=... 
AND column_composite1='a'
AND column_composite2>=10.0
AND column_composite2<=20.0
于 2013-09-09T16:09:11.457 回答
0
CREATE TABLE widerow
(    
   row_composite1 text,
   row_composite2 text,
   column_name decimal,
   value text, 
   PRIMARY KEY((row_composite1,row_composite2),column_name)
)

SELECT * FROM widerow WHERE row_composite1=... 
AND row_composite2=...
AND column_name>=10.0
AND column_name<=20.0
ORDER BY column_name DESC
于 2013-09-09T14:06:19.833 回答