我们正在尝试为Cassandra Datastax社区版和java驱动程序创建原型。 我尝试使用Cassandra Java Driver(simplex密钥空间)中的Sample测量简单检索和更新的延迟。
我有两个数据中心,每个数据中心有一个Rack。每个机架包含3个节点。 我总共有6个节点(VM)。
我已将key_cache_size_in_mb配置为10,以便调整检索/更新操作。
总之,我们正在尝试调整示例操作,以便为读取/更新操作获得大约5 ms的延迟。
遵循我们设法实现的延迟:
检索播放列表表格已过去19毫秒。
标题专辑艺术家更新simplex.playlist 更新歌曲表已过去14毫秒。
检索歌曲表已经过了14毫秒。
标题专辑艺术家标签
La Petite Tonkinoise'Bee ByeBlackbird'JosŽphineBaker
为了提高性能并实现比上述更好的延迟,应该进行哪些调整?
您的指导/见解将受到高度赞赏。
提前致谢, 欧文
答案 0 :(得分:1)
节点数量越多,分布越好,C *表现越好
64位JVM的性能优于32位(至少使用Oracle JVM 1.6)
物理环境,最小为8GB,但16-32 GB,8核处理器之间的任何东西
至少有两个磁盘,一个用于提交日志,另一个用于数据目录
在相同卷上提交日志+数据目录 - 避免这种情况。写入的最大性能提升是将提交日志放在单独的磁盘驱动器中。提交日志是100%顺序的,而数据读取是从数据目录中随机的。提交日志和提交之间的I / O争用SSTable可能会恶化提交日志写入和SSTable读取。但这不适用于SSD或EC2。
JVM参数调整(在8GB RAM系统上)
堆调整
-Xms $ {MAX_HEAP_SIZE} -Xmx $ {MAX_HEAP_SIZE} - 默认为可用物理内存的40-50% - 4 GB -Xmn $ {HEAP_NEWSIZE} - 默认为java堆的25% - 1GB
GC调整
-XX:+ UseConcMarkSweepGC -XX:+ CMSParallelRemarkEnabled -XX:+ UseParallelGC -XX:SurvivorRatio = 4 -XX:MaxTenuringThreshold = 0
同步所有节点上的时钟 - 当C *为每个coumn值添加时间戳t时,必须使用NTP守护程序或脚本在环上同步时钟。已知NTP可以跨数据中心漂移时钟。
谨慎使用密钥缓存,因为它只占用内存占用最少的性能,因为它只存储密钥和数据位置。保存一个文件I / O搜索。 使用keys_cached = 50000;
更新列族my_column_familyhttps://github.com/apache/cassandra/blob/trunk/conf/cassandra-env.sh?source=cc
您可以调整“#GC调整选项”
部分中编码的选项key_cache_size_in_mb - 此设置可在cassandra.yaml文件中找到,适用于密钥空间中的所有列系列,或者设置为CF级别。您需要知道行的大小,并计算出计算结果。例如对于要缓存的100万行,平均行大小为100字节,每列有25个列,每个4字节,需要将其设置为100 mb(1 mn * 100 bytes)