当前位置:  开发笔记 > 编程语言 > 正文

Cassandra的低写性能

如何解决《Cassandra的低写性能》经验,为你挑选了2个好方法。

我是NoSQL和Cassandra的新手.我正在尝试设置来实现内存缓存唯一的解决方案.我正在通过从100000行文件中逐行读取并使用Hector插入到Cassandra进行处理.我注意到每秒约6000个插入的吞吐量非常低.整个写操作大约20.5秒,这对我们的应用来说是不可接受的.我们需要每秒100000次插入.我正在使用4GB RAM的Windows 7计算机上进行测试.

我正在进行仅插入测试.

请告诉我哪里出错了.请建议我如何每秒提高插入量.

Keyspace: Keyspace1
        Read Count: 0
        Read Latency: NaN ms.
        Write Count: 177042
        Write Latency: 0.003106884242157228 ms.
        Pending Tasks: 0
                Column Family: user
                SSTable count: 3
                Space used (live): 17691
                Space used (total): 17691
                Number of Keys (estimate): 384
                Memtable Columns Count: 100000
                Memtable Data Size: 96082090
                Memtable Switch Count: 1
                Read Count: 0
                Read Latency: NaN ms.
                Write Count: 177042
                Write Latency: NaN ms.
                Pending Tasks: 0
                Key cache capacity: 150000
                Key cache size: 0
                Key cache hit rate: NaN
                Row cache capacity: 150000
                Row cache size: 0
                Row cache hit rate: NaN
                Compacted row minimum size: 73
                Compacted row maximum size: 924
                Compacted row mean size: 784

我尝试了几种设置行缓存和密钥缓存的方法:

    通过Cassandra CLI

    通过NodeCmd:java org.apache.cassandra.tools.NodeCmd -p 7199 setcachecapacity Keyspace1 user 150000 150000

DNA.. 9

我不会将每秒6000次写入描述为"慢" - 但Cassandra可以做得更好.但请注意,Cassandra专为持久写入而设计,因此可能比仅限内存的缓存解决方案具有更低的性能.

正如sbridges所说,使用单个客户端无法从Cassandra中获得完整的性能.尝试使用多个客户端线程,进程或计算机.

我认为你不会在一个节点上每秒获得100,000次写入.我在适度的硬件上每秒只获得了大约20,000-25,000次写入(尽管Cassandra自从我进行基准测试以来已经明显加快了).对于单个客户对单个商品节点来说,每秒6000似乎是正确的.

使用一组节点,您每秒肯定可以获得100,000个(请参阅http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html,了解最近每秒1,000,000次写入的基准测试!)

行缓存和密钥缓存有助于读取性能,而不是写入性能.

此外,请确保您正在批处理写入(如果适用) - 这将减少网络开销.



1> DNA..:

我不会将每秒6000次写入描述为"慢" - 但Cassandra可以做得更好.但请注意,Cassandra专为持久写入而设计,因此可能比仅限内存的缓存解决方案具有更低的性能.

正如sbridges所说,使用单个客户端无法从Cassandra中获得完整的性能.尝试使用多个客户端线程,进程或计算机.

我认为你不会在一个节点上每秒获得100,000次写入.我在适度的硬件上每秒只获得了大约20,000-25,000次写入(尽管Cassandra自从我进行基准测试以来已经明显加快了).对于单个客户对单个商品节点来说,每秒6000似乎是正确的.

使用一组节点,您每秒肯定可以获得100,000个(请参阅http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html,了解最近每秒1,000,000次写入的基准测试!)

行缓存和密钥缓存有助于读取性能,而不是写入性能.

此外,请确保您正在批处理写入(如果适用) - 这将减少网络开销.



2> sbridges..:

您使用多少个线程/进程来执行插入?Hector调用是同步的,因此如果您只在客户端使用1个线程,那么这可能是您的瓶颈.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有