我们如何在 CQL3 中处理数百万列?我们有一个特殊的表,其中所有行基本上都是复合键并且非常宽。
我正在阅读这个暗示两种方式的问题 CQL3 中的集合是否有某些限制?
此外,我们的复合键的类型是 String.bytes 并按 STring 排序
我们有一个精确匹配的表,它是 Decimal.bytes 并按十进制排序。
在 CQL3 中如何处理这个问题?
谢谢,院长
我们如何在 CQL3 中处理数百万列?我们有一个特殊的表,其中所有行基本上都是复合键并且非常宽。
我正在阅读这个暗示两种方式的问题 CQL3 中的集合是否有某些限制?
此外,我们的复合键的类型是 String.bytes 并按 STring 排序
我们有一个精确匹配的表,它是 Decimal.bytes 并按十进制排序。
在 CQL3 中如何处理这个问题?
谢谢,院长
“哦,我的部分问题丢失了,因为 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
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
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