6

我是 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

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

  1. 通过 Cassandra CLI

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

4

2 回答 2

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 次写入的基准!)

行缓存和键缓存是为了提高读取性能,而不是提高写入性能。

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

于 2011-12-06T21:54:59.673 回答
8

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

于 2011-12-06T16:34:41.297 回答