Java Cassandra的低写入性能

Java Cassandra的低写入性能,java,performance,nosql,cassandra,hector,Java,Performance,Nosql,Cassandra,Hector,我是NoSQL和Cassandra的新手。我正在尝试设置,以实现只在内存中缓存的解决方案。我从一个100000行的文件中逐行读取数据,并使用Hector插入到Cassandra。我注意到每秒大约6000次插入的吞吐量非常低。整个写操作大约需要20.5秒,这对于我们的应用程序来说是不可接受的。我们需要每秒大约100000次插入。我正在一台装有4GB内存的Windows7计算机上进行测试 我正在做一个只插入的测试 请告诉我哪里出了问题。请就如何提高每秒插入次数提出建议 Keyspace: Keysp

我是NoSQL和Cassandra的新手。我正在尝试设置,以实现只在内存中缓存的解决方案。我从一个100000行的文件中逐行读取数据,并使用Hector插入到Cassandra。我注意到每秒大约6000次插入的吞吐量非常低。整个写操作大约需要20.5秒,这对于我们的应用程序来说是不可接受的。我们需要每秒大约100000次插入。我正在一台装有4GB内存的Windows7计算机上进行测试

我正在做一个只插入的测试

请告诉我哪里出了问题。请就如何提高每秒插入次数提出建议

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用户150000 150000


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

    我不会将每秒6000次写入描述为“慢”——但Cassandra可以做得更好。但请注意,Cassandra是专为持久写入而设计的,因此其性能可能低于仅使用内存的缓存解决方案

    正如sbridges所说,您无法使用单个客户端从Cassandra获得全面性能。尝试使用多个客户端线程、进程或计算机

    我认为在一个节点上每秒不会有100000次写入。在普通硬件上,我每秒只获得了大约20000-25000次写操作(尽管自从我进行基准测试以来,Cassandra的速度明显加快)。对于单个客户机和单个商品节点,每秒6000次似乎是合适的

    使用一个节点集群,您肯定可以每秒获得100000次写入(请参阅最近每秒1000000次写入的基准测试!)

    行缓存和键缓存有助于提高读取性能,而不是写入性能


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

    您使用的是哪种磁盘存储?它是SSD还是HDD或内存文件系统?在运行时,您的应用程序使用了多少CPU用户/系统?(在任务管理器中)磁盘存储是硬盘。CPU总量约为40%。一年前我们做了一些测试,发现Cassandra的速度比PostgreSQL慢,直到Cassie拥有4台以上的服务器。所以我一点也不奇怪。您使用的是单一数据库服务器吗?我只使用一个线程。我将尝试使用多线程。批量插入可以提高很多性能。我从5k插入/秒增加到20-25k插入/秒。我有3个节点。6个cpu,32 gb ram