【问题标题】:Cassandra only one serverCassandra 只有一台服务器
【发布时间】:2015-03-19 16:11:30
【问题描述】:

我有一个 Cassandra 集群,它只使用一个节点(因为我只有一个服务器并进行比较)。所以我得到了一个 43 GB 大的时间序列表,我运行的每个查询都非常慢。我的问题是,为什么只有一个节点的集群中的一个节点需要 43GB,而在具有更多节点的集群中的一个节点中 43GB 就可以了?

Cassandra 是否使用集群中每台服务器的 RAM 和 CPU,即使查询只需要一个节点?这是我的想法,但我不确定......

希望有人能帮忙

谢谢!

编辑:我的桌子:

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

num 是记录的编号。有 300-400 个值,比如 10 000 000 条记录。现在数据库是ca。 60GB(昨天是 43GB),甚至 INSERT 查询也超时。如果我将超时设置得更高,服务器服务就会崩溃。

【问题讨论】:

  • 我想我在一个集群中加载了这么多,但它不是生产性的,更多的是内部实用程序。这实际上取决于您的方案和查询。你也可以添加它们吗?
  • @Friedrich 请避免两次发布相同的问题!如果您担心曝光,还有其他方法可以增加您发布的问题的曝光率,例如:添加更多相关标签(例如 C* 版本)、使用更多相关信息更新您的问题等。
  • 我是新来的,不知道如果我在现有帖子中提出新问题会有什么反应,即使情况相同。但是感谢您的努力!

标签: cassandra


【解决方案1】:

为什么只有一个节点的集群中的一个节点需要 43GB 这么多

43GB 对于 C* 集群中的一个节点来说并不多(即使集群只包含一个节点)。例如,我们在 Netflix 中有集群,其中包含 800GB(每个节点)甚至更多的节点!

查询缓慢还有另一个原因,一种猜测是您有一个(或多个)非常大的行,这是 Cassandra 的致命弱点。您应该检查的另一件事是您正在使用的读/写模式:因为 C* 最终是一致的,如果您尝试执行:read-modify-read - 您将得到糟糕的结果。

此外,您应该确保C* heap size is tuned 符合您的应用程序要求。

另一种选择是,您遇到了以下performance issue(他还在 SO 中发布了this question,您可以很好地利用您的时间来阅读答案)。

也可能有其他选项,但为了进一步挖掘,您应该提供有关您正在做什么的更多详细信息:C* 版本、CF 结构、您如何插入(代码)等。

Cassandra 是否使用集群中每台服务器的 RAM 和 CPU,甚至 什么时候查询只需要一个节点?

CPU 和 RAM 不跨集群共享。假设执行查询所需的所有数据都存在于一个节点上,则查询将(最多)通过两个节点:协调器(接收查询的节点),它将在一跳中将其转发到保存的节点数据。如果您将使用令牌感知策略,您的查询将直接转到保存数据的节点。您可以在 datastax 文档中了解更多信息。

【讨论】:

  • 我真的有大行......为什么这是 Cassandra 的问题?测试时我只执行读取查询。完成这些查询后,我再次阅读以准备下一次测试的表格。我想这应该不是问题。我想听听你对第一个问题的回答。
  • CPU 和 RAM 不跨集群共享。请参阅我的答案的更新。
  • 好的,这回答了我对 RAM 和 CPU 的问题。我将阅读有关令牌感知策略的文章,但我只有一个节点。协调节点和保存数据的节点不一样吗?对于第一个问题,我的意思是为什么大行是一个问题。你能回答一下吗?感谢您的帮助!
  • 宽行有以下两个主要缺点: 1.(与您的情况无关)在包含几个节点的集群中 - 获取宽行的查询将不断命中同一个节点导致堆压力。 2. 虽然行可能比内存更宽,但处理大行会影响更多的 GC(“停止世界”事件),这可能会给您的应用程序带来缓慢
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多