1

嗨,我正在尝试了解使用 cql3 将数据插入到具有地图类型的表中时遇到的这个问题。通常我可以在每个 cql3 线程中插入数据平均约 1000 iops 没有问题。一旦我添加了地图类型,插入在大约 100,000 个条目后超时并出现此错误:无法完成请求:一个或多个节点不可用。在多个节点上(甚至跨数据中心),我注意到插入期间 CPU 负载异常高。

每个节点的规格是:Cpu:16 核心内存:64GB

这是我设置的测试表架构。

CREATE TABLE test (
    id text,
    q text,
    g text,
    gt text,
    gi map<text,text>,
    ts timestamp,
    PRIMARY KEY (id, ts)
) WITH CLUSTERING ORDER BY (ts DESC);

CREATE KEYSPACE testkeyspace WITH replication = {
    'class': 'NetworkTopologyStrategy',
    'DC1': '2',
    'DC2': '2'
};

卡桑德拉版本 1.2.4

更新:目前我们只是从其他 rdbms 导入数据。大约 100% 的时间,我们要么添加新行,要么向地图列添加新元素。我知道地图列可以拥有的元素数量的限制。

4

3 回答 3

0

实际上,将条目插入 Map 类型实际上是一种更新。集合上的插入会对性能产生影响。

于 2014-08-04T14:22:43.983 回答
0

在我的 CF 中添加地图类型列时,我遇到了一个非常相似的问题(Theo 链接了我上面的相关问题)。从那以后,我使用了一种解决方法,避免使用地图列类型。另一位用户在 cassandra 邮件列表上报告了此问题,但该问题仍未解决。

一些注意事项:

于 2013-06-27T10:27:36.353 回答
0

我最近看到一些报告说使用 CQL3 集合时的性能变得非常糟糕,它解释了我自己遇到的一些问题。我不知道究竟是什么导致了这个问题,如果是收藏本身还是其他什么。

人们遇到的最常见的事情是他们的模式创建了热点。仅查看语句很难判断这CREATE TABLE是否是您的问题,但如果您的分区键(主键中的第一项)的不同值的数量很少,那么您会不断地写入同一个节点。此外,即使 Cassandra 在理论上处理数十亿行,但当 Cassandra 必须不断压缩它们时,具有宽高流量的行会导致大量开销。如果您还混合读取和写入,Cassandra 必须通过 SSTables 进行大量挖掘以实现一行。

请发布有关您正在运行的插入的更多信息,如果您一直在编写新行,修改现有行,尤其是您如何使用这些映射列 - 您是在添加新元素还是删除元素?在任何给定时间,这些地图列之一中应该有多少元素?

您可以做的另一件事是通过跟踪运行一个或几个操作并查看 Cassandra 正在做什么(请参阅http://www.datastax.com/dev/blog/tracing-in-cassandra-1-2了解如何以启用跟踪和分析结果)。

于 2013-06-25T06:54:53.563 回答