Cassandra存储vs内存大小



我正在考虑开发一个使用Cassandra后端的应用程序。我希望能够在商用硬件上运行每个cassandra节点,规格如下:

  • 四核2GHz i7 CPU
  • 2个750GB磁盘驱动器
  • 16gb安装内存

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

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

另外,我是否会给Cassandra分配一个接近16 GB的堆(-Xmx),或者Cassandra使用堆外内存?

您不应该将Cassandra堆设置为超过8GB;如果大于这个值,那么垃圾收集将会导致长时间的停顿。Cassandra将使用buffer cache(像其他应用程序一样),所以剩余的内存不会浪费。

如果您的热集都适合RAM,或者如果服务速率可以在磁盘上提供,那么16GB RAM就足够提供数据了。磁盘可以进行大约100次随机IO/s,因此在您的设置中,如果需要超过200次读取/秒,则需要确保数据在缓存中。Cassandra输出良好的缓存统计数据(Cassandra -cli show keyspaces),所以你应该很容易就能知道你的缓存是多么有效。

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

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

最新更新