我在我的开发机器上安装了单个节点Cassandra(对Cassandra的经验很少).我总是在节点中只有很少的数据,我没有遇到任何问题.我今天在一张表中插入了大约9,000个元素来试验一个真实世界的用例.当我启动节点时,启动时间现在非常长.我在system.log中得到了这个
Replaying /var/lib/cassandra/commitlog/CommitLog-3-1388134836280.log
...
Log replay complete, 9274 replayed mutations
Run Code Online (Sandbox Code Playgroud)
花了13分钟,几乎无法忍受.我想知道是否有一种方法可以在不重播日志的情况下立即读取数据.在所有9,000个元素都没有之后,必须有更快的启动方式.我用Google搜索提示并搜索了Cassandra的文档,但我没有找到任何内容.显而易见的是,我不是在找正确的事情,是否有人会如此友好地指出正确的文件?谢谢.
有一些事情可能会有所帮助.您可以做的最明显的事情是在关闭Cassandra之前刷新提交日志.这也是生产中的好主意.在我停止生产Cassandra节点之前,我将运行以下命令:
nodetool disablethrift
nodetool disablegossip
nodetool drain
Run Code Online (Sandbox Code Playgroud)
前两个命令正常关闭与连接到此节点的客户端的连接,然后关闭到环中其他节点的连接.drain命令将memtables刷新到磁盘(sstables).这应该最小化启动时需要重播的内容.
还有其他因素可以使启动需要很长时间.Cassandra在启动时打开磁盘上的所有SSTable.因此,在磁盘上拥有的列系列和SSTable越多,在节点能够开始为客户端提供服务之前所需的时间就越长.在1.2版本中已经完成了一些工作来加快速度(所以如果你不在1.2上,你应该考虑升级).减少SSTable的数量可能会缩短您的开始时间.
既然你提到这是一台开发机器,我也会给你我的开发环境观察.在我的开发机器上,我做了很多创建和删除列族和键空间.这可能导致一些系统CF显着增长并最终导致明显的减速.处理此问题的最简单方法是使用一个脚本,该脚本可以快速引导新数据库并清除所有旧数据/var/lib/cassandra.
| 归档时间: |
|
| 查看次数: |
1874 次 |
| 最近记录: |