2011-12-13 192 views
3

我正在考虑开发一个带有Cassandra后端的应用程序。我希望,我将能够运行具有以下规格在商用硬件上的每个卡桑德拉节点:Cassandra存储vs内存大小调整

  • 四核2GHz的酷睿i7 CPU
  • 2个750GB磁盘驱动器
  • 16 GB RAM安装

现在,我一直在网上阅读,Cassandra的可用磁盘空间应该是磁盘上存储的数量的两倍,这意味着每个节点(设置为RAID-1配置)能够存储375 GB的数据,这是可以接受的。

我的问题是,如果16GB内存足以有效地为每个节点提供375GB的数据。开发的应用程序中的数据也是相当时间依赖的,因此最近的数据将是从数据库中读取最多的数据。事实上,大部分数据将在大约6个月后被删除。

另外,我可以将Cassandra堆(-Xmx)分配到接近16 GB,还是Cassandra使用堆内存?

回答

3

您不应将Cassandra堆设置为超过8GB;比这更大,并且垃圾收集会在大停顿的时候杀死你。 Cassandra将使用缓冲区缓存(与其他应用程序一样),因此剩余的内存不会被浪费。

如果热设置全部适合RAM,或者服务速率可以从磁盘提供,则16GB的RAM将足以提供数据。磁盘可以做大约100个随机IO /秒,所以如果您需要超过200次读取/秒,您需要确保数据在缓存中。 Cassandra导出了良好的缓存统计信息(cassandra-cli show keyspaces),因此您应该可以轻松地分辨出缓存的有效性。

请记住,RAID-1中只有两个磁盘,您不会有专门的提交日志。这可能会严重影响写入性能。如果影响性能,可能需要考虑关闭提交日志,并放弃持久写入。

+1

谢谢你的回答!你认为跳过RAID-1会更好一些,而将提交日志放在第二个磁盘(可以是7200旋转驱动器或256GB SSD),而是增加Cassandra复制因子? –

1

尽管在Cassandra中使用非常大的堆可能并不明智,但在我的公司,我们已经使用了10GB到12GB的堆,至今没有任何问题。我们的服务器通常至少有48 GB的内存(RAM很便宜 - 所以为什么不:-)),所以我们可能会尝试扩展堆,看看会发生什么。