卡桑德拉数据库不堪重负?

时间:2015-01-19 12:00:29

标签: cassandra

我使用以下查询在cassandra数据库中创建了一个表:

CREATE TABLE table(
  num int,
  part_key int,
  val1 int,
  val2 float,
  val3 text,
  ...,
  PRIMARY KEY((part_key),num)
);

该表存储来自技术设备的数据。每个记录的分区键part_key为1,因为我只想在一个服务器上执行范围查询。我知道这对Cassandra来说是一个糟糕的用例,但我需要这样做才能进行比较。

主键num是记录的编号(从1到8.000.000)。

每条记录有400个其他值,分别是float,int和text类型。我在此表中插入了8.000.000条记录(43 GB),并希望运行我的查询,如:

SELECT num, val1, val45, val90 
FROM ks.table 
WHERE part_key=1 AND num>9999 AND num<20001;

我在cql-shell中执行了查询,并且“操作超时”。所以我将cassandra.yaml文件中的read_request_timeout_in_ms和range_request_timeout_in_ms更改为60000(2分钟)。

再次执行查询时,我在5分钟后得到“错误10054:现有连接被远程主机关闭”。 Datastax Cassandra社区服务器2.0.11服务在服务器上不再运行。

我重新启动了服务,再次尝试了,服务又崩溃了。我甚至无法重启服务,我不得不重新启动服务器。 我也尝试使用Cassandra cpp-driver,也无法执行此查询。

这样的小问题
... AND num<1000;

仍有可能。

我的问题是:我做错了什么吗?我知道Cassandra有更多的节点更好,但我认为Cassandra只需要更多的时间。有可能,Cassandra无法执行这样的查询吗?

谢谢!

服务器:

Intel(R)Xeon(R)CPU E5504 @ 2.00GHz 2.00GHz(2个处理器)/ 16GB RAM

CPU利用率:50% - 60%,15秒后约30%/ RAM:整个时间为2.9 GB

编辑:

我的Cassandra密钥空间现在为60GB,小查询如

... AND num<10;

甚至Inserts返回时间。有时服务崩溃...... 有想法的人可以解释一下吗?一个答案说,一个拥有43GB的节点在拥有更多节点的集群中是不同的,就像我的集群中只有一个节点一样。有人可以解释一下吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这里的一个关键问题是,您运行的C *版本的cqlsh不会翻页结果。这意味着在查询时必须序列化整个结果集,因为您的数据模型将非常大(如kha所指出的)。我会尝试使用启用分页的驱动程序执行类似的查询,当然要确保您有足够的网络带宽来返回数据。

43GB应该可以通过单个C *节点轻松处理,尽管仅使用单个节点运行C *集群会牺牲C *提供的几乎所有优势。