首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >卡桑德拉亚马逊EC2,阅读性能实验

卡桑德拉亚马逊EC2,阅读性能实验
EN

Stack Overflow用户
提问于 2012-08-09 10:45:27
回答 2查看 1.1K关注 0票数 6

我需要一些帮助来提高卡桑德拉的阅读能力。我关注的是,随着列族规模的增加,阅读性能会下降。我们有以下关于单节点卡桑德拉的统计数据。

操作系统: 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)

  • rpc_server_type: hsha
  • disk_access_mode: mmap
  • concurrent_reads: 64
  • concurrent_writes: 32

平台: 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创建的。

代码语言:javascript
运行
复制
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的使用。当数据大小较小,且波形很小时。

我怎样才能提高卡桑德拉的表现。您的建议将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 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上的性能测试

票数 0
EN

Stack Overflow用户

发布于 2015-01-18 15:38:25

简短回答:行缓存和键缓存。

如果您的数据包含将像大多数系统一样经常读取的子集,请尝试使用行缓存和键缓存。

行缓存是内存缓存中的一个,它将频繁读取的行完全存储在内存中。请记住,这可能没有期望的效果,如果你是数据是分散的。

键缓存通常更适合,因为它只将分区键及其偏移量存储在磁盘上。这通常有助于跳过Cassandra的查找(不需要使用分区索引和分区摘要)。

尝试使用键空间和表启用密钥缓存,并检查性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11881658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档