我们在CQL3中如何处理数百万列?我们有一个特殊的表,其中所有行基本上都是复合键,而且非常宽。
我正在读这个暗示两种方式的问题 Does collections in CQL3 have certain limits?
此外,我们的复合键的类型是String.bytes,并由STring
排序我们有一个完全匹配的表,它是Decimal.bytes并按十进制排序。
如何在CQL3中处理此问题?
感谢, 迪安
答案 0 :(得分:1)
“哦,部分我的问题丢失了,因为SO格式化了它。我正在寻找Decimal.bytes和String.bytes作为我的复合键......没有”价值“ ,只是一个col名称,我希望所有列都是小数> 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上的范围进行查询,并且对于EACH column_composite1,可以使用不同的column_composite2值(10.a,10.b 11.c,11.d,11.e ...)
“如何在该用例中获取row_composite1&gt;”a“和row_composite1&lt;”b“的所有列?ie。我不关心复合名称的后半部分。”< / em>的
这里有两种可能的解决方案
对于解决方案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
答案 1 :(得分: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