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