我需要一些帮助来提高卡桑德拉的阅读能力。我关注的是,随着列族规模的增加,阅读性能会下降。我们有以下关于单节点卡桑德拉的统计数据。
操作系统: Linux - CentOS版本5.4 (最终)
卡桑德拉版本:ApacheCassandra-1.1.0
Java版本: "1.6.0_14“Java(TM) SE运行时环境(build 1.6.0_14-b08) Java HotSpot(TM) 64位服务器VM (build 14.0-b16,混合模式)
Cassandra配置: (cassandra.yaml)
平台: Amazon-ec2/Rightscale m1.Xlarge实例,其中包含4个带有raid0的临时磁盘。(15 GB总内存,4个虚拟核,2个ECU,总ECU = 8)
实验配置:我尝试过用GC做一些实验
Cassandra配置:
10 GB内存分配给Cassandra堆,3500 GB是堆新大小。
JVM Config:
JVM_OPTS="$JVM_OPTS -XX:+UseParNewGC“
JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC“
JVM_OPTS="$JVM_OPTS -XX:+CMSParallelRemarkEnabled“
JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=1000“
JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=0“
JVM_OPTS="$JVM_OPTS -XX:CMSInitiatingOccupancyFraction=40“
JVM_OPTS="$JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedOops“
来自社区2.0的OpsCenter结果统计:
每秒读取请求208至240
每秒18至28次写入请求
操作系统负载24.5至25.85
写入请求延迟127至160微秒
读取请求延迟82202至94612微秒
操作系统每秒发送网络流量44646 KB
OS接收网络流量4338 KB /秒
OS磁盘队列大小为13至15次请求
读作待决请求25至32
OS磁盘延迟48到56 ms
OS磁盘每秒读取4.6Mb
磁盘IOPs每秒读取420
IOWait 80 % CPU avg
空闲13 % CPU avg
Rowcache被禁用了。
列族
我仅阅读的专栏家族之一是通过CLI创建的。
create column family XColFam
with column_type='Standard'
and comparator = CompositeType(BytesType,IntegerType)';"列族SSTable大小=7.10GB,SSTable计数=2
XColFam列家族有59499904个no。在估计的行键中(大多数是通过mx4jtools估计的不同长度的utf8文本),列的性质类似瘦,值为0 bytes.....now。
大多数行应该有很小的列数,可能是1~ 10列,所以如果列名的第一分量约为20到30字节,第二列是8字节整数.复合列的第二部分可以动态重复,但概率很低.第一组分在不同的品种中重复,但行中的列数可能不同。
我尝试过SnappyCompression压缩列家族,但是没有改变大小。
我有一个计划好的服务,用20个线程运行几个小时,并对这个列家族发出多个键的随机读取请求(目前每个请求有2个键),并读取整行、没有列片等。
我认为它现在表现不好,因为它每分钟处理的请求太少。在专栏家族规模不那么大之前,它的效果更好。它大约是3到4GB。
恐怕阅读性能下降得太快了,随着专栏家族规模的增加。
我也试图调整一些GC和内存的东西,因为在此之前,我有很多GC和CPU的使用。当数据大小较小,且波形很小时。
我怎样才能提高卡桑德拉的表现。您的建议将不胜感激。
发布于 2013-10-31 10:32:24
看,cassandra是相对的I/O dependent.EC实例有“不可靠”的I/O设计(Xen虚拟化),我的第一个建议是在真正的硬件上使用Cassandra,在实际硬件上有一个控件。例如,您可以使用SSD磁盘进行CommitLog。看看卡桑德拉硬件提案。
然而,切换到自己的硬件是一个有点激进的选择。要留在亚马逊,请尝试使用EBS
(EBS)提供块级存储卷,以供与亚马逊EC2实例一起使用。Amazon卷是网络连接的,并且与实例的生命周期无关。Amazon提供了高度可用、高度可靠、可预测的存储卷,可以附加到运行的Amazon实例并作为实例中的设备公开。Amazon特别适合于需要数据库、文件系统或访问原始块级存储的应用程序。
Amazon允许您创建从1GB到1TB的存储卷,可以通过Amazon实例作为设备挂载。可以将多个卷挂载到同一个实例。Amazon使您能够提供一个特定级别的I/O性能(如果需要的话),方法是选择提供的IOPS卷。这使您可以预期地将每个亚马逊EC2实例的IOPS扩展到数千个。
还可以查看卡桑德拉在EC2上的性能测试
发布于 2015-01-18 15:38:25
简短回答:行缓存和键缓存。
如果您的数据包含将像大多数系统一样经常读取的子集,请尝试使用行缓存和键缓存。
行缓存是内存缓存中的一个,它将频繁读取的行完全存储在内存中。请记住,这可能没有期望的效果,如果你是数据是分散的。
键缓存通常更适合,因为它只将分区键及其偏移量存储在磁盘上。这通常有助于跳过Cassandra的查找(不需要使用分区索引和分区摘要)。
尝试使用键空间和表启用密钥缓存,并检查性能。
https://stackoverflow.com/questions/11881658
复制相似问题