我将Cassandra
用于项目,这是我的第一个项目。
,我试图在两个表上做一个简单的请求,但这不起作用......
我想做类似的事情:
Select * from table1, table2 where table1.test = test and table2.test2 = 123;
是否可以在Cassandra
中的两个表格上进行请求?我怎么能这样做?
由于
答案 0 :(得分:1)
我正在尝试在两个表上做一个简单的请求
您尝试做的事情被称为“分布式连接”,而Cassandra专门用于阻止您这样做。
解决这些类型问题的方法是使用名为非规范化的过程。假设你有两个简单的表carMake
和carModel
:
makeid | make
--------+--------
1 | Chevy
2 | Dodge
3 | Ford
modelid | makeid | model
---------+--------+---------
15 | 3 | Focus
11 | 3 | Mustang
32 | 2 | Charger
82 | 3 | Fusion
现在,在传统的RDBMS中如果我想选择带有“福特”品牌的所有车型,我会执行JOIN查询。但是对于Cassandra,我们的想法是在建模阶段通过构建一个支持同时查询汽车制造和模型的能力的表来解决这个问题:
CREATE TABLE carMakeModel (
carid int,
make text,
model text,
PRIMARY KEY (make,carid));
aploetz@cqlsh:stackoverflow> SELECT * FROM carMakeModel WHERE make='Ford';
make | carid | model
------+-------+---------
Ford | 1 | Mustang
Ford | 2 | Focus
Ford | 3 | Fusion
(3 rows)
这里要注意的一些要点:
make
尽可能重复。您会注意到“Ford”在结果集中指定了3次。如果您有13种型号福特的数据,您可以将“福特”的值存储13次。carid
添加为PRIMARY KEY的一部分,以确保每个model
的唯一性,否则每个make
的INSERT都会覆盖自身。