我是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次写入的基准测试!)
行缓存和密钥缓存有助于读取性能,而不是写入性能.
此外,请确保您正在批处理写入(如果适用) - 这将减少网络开销.
我不会将每秒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次写入的基准测试!)
行缓存和密钥缓存有助于读取性能,而不是写入性能.
此外,请确保您正在批处理写入(如果适用) - 这将减少网络开销.
您使用多少个线程/进程来执行插入?Hector调用是同步的,因此如果您只在客户端使用1个线程,那么这可能是您的瓶颈.