如何在cassandra cql中使用2个或更多表进行连接查询

时间:2013-06-22 07:07:00

标签: cassandra cql

我是cassandra的新手。这里我有两个表EVENTSTOWER。我需要加入那些查询。但我无法做到这一点。

EVENTS表的结构:

eid int PRIMARY KEY,
a_end_tow_id text,
a_home_circle text,
a_home_operator text,
a_imei text,
a_imsi text,

TOWER表的结构:

 tid int PRIMARY KEY,
 tower_address_1 text,
 tower_address_2 text,
 tower_azimuth text,
 tower_cgi text,
 tower_circle text,
 tower_id_no text,
 tower_lat_d text,
 tower_long_d text,
 tower_name text,

现在,我想加入这些关于EIDTID的表,以便我可以获取两个表的数据。

3 个答案:

答案 0 :(得分:60)

Cassandra =没有加入。您的模型是100%关系型的。你需要为Cassandra重新思考它。我建议你看看these slides。他们深入研究如何为cassandra建模数据。这里还有一个涵盖该主题的webinar。但是不要再考虑外键和连接表了,因为如果你需要关系,cassandra就不是工作的工具。

但为什么?
因为那时你需要检查一致性并执行关系数据库所做的许多其他事情,因此你失去了cassandra提供的性能和可伸缩性。

我该怎么办?
非规范化!一张表中有大量数据?但是这个表会有太多列!所以呢? Cassandra可以处理表格中的大量列。

您可以做的另一件事是模拟客户端应用程序中的连接。匹配代码中的两个数据集,但这将非常慢,因为您必须迭代所有信息。

另一种方法是执行多个查询。选择所需的事件,然后选择匹配的塔。

答案 1 :(得分:5)

有两种方法可以在Cassandra中将表连接在一起并查询它们。但是,当然你必须重新考虑数据模型部分。

  1. 使用Apache Spark’s SparkSQL™与Cassandra(开源或DataStax Enterprise - DSE)。
  2. 使用Cassandra和DSE的DataStax provided ODBC连接器。

答案 2 :(得分:0)

PlayOrm是一个很好的选择,可以使用特殊的可扩展SQL语言在可扩展系统上进行连接,您可以在其中加入分区(即,您永远不想加入10亿行和另外10亿行)。它有大量的noSQL模式,是完全打破hibernate和JPA,以便在需要时模拟带有客户端连接的noSQL模式。