【问题标题】:Low write performance of CassandraCassandra 的低写入性能
【发布时间】:2012-01-14 03:11:00
【问题描述】:

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

【问题讨论】:

  • 您使用的是哪种磁盘存储?它是 SSD 还是 HDD 还是内存文件系统?您的应用程序在运行时使用了多少 CPU 用户/系统? (在任务管理器中)
  • 磁盘存储为硬盘。总 CPU 约为 40%。
  • 一年前我们做一些测试时发现 Cassandra 比 PostgreSQL 慢,直到 Cassie 有 4 台以上的服务器。所以我并不感到惊讶。
  • 您使用的是单个数据库服务器吗?

标签: java performance nosql cassandra hector


【解决方案1】:

我不会将每秒 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 次写入的基准!)

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

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

【讨论】:

  • 批量插入提高了很多性能。我从 5k 插入/秒到 20-25k 插入/秒。我有 3 个节点。 6 个 CPU,32 GB 内存
【解决方案2】:

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

【讨论】:

  • 我只使用一个线程。我将尝试使用多个线程。
猜你喜欢
  • 2017-06-03
  • 2016-07-12
  • 2011-06-15
  • 2012-06-30
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
相关资源
最近更新 更多