【问题标题】:Insert performance with Cassandra使用 Cassandra 插入性能
【发布时间】:2011-08-22 11:13:06
【问题描述】:

抱歉我的英语提前。

我是 Cassandra 及其数据模型的初学者。我正在尝试在一个节点上的本地 cassandra 数据库中插入一百万行。每行有 10 列,我只将它们插入到一个列族中。

使用一个线程,该操作大约需要 3 分钟。但我想对 200 万行做同样的操作,并保持愉快的时光。然后我尝试用 2 个线程插入 200 万行,预计在 3-4 分钟左右会有类似的结果。但是我得到一个像 7 分钟这样的结果……是第一个结果的两倍。当我查看不同的论坛时,建议使用多线程来提高性能。 这就是我问这个问题的原因:使用多线程将数据插入本地节点(客户端和服务器在同一台计算机中)中是否有用,仅在一个列族中?

一些信息: - 我用 pycassa - 我在不同的磁盘上分离了提交日志库和数据库 - 我为每个线程使用批量插入 - 一致性级别:一 - 复制因子:1

【问题讨论】:

  • 您找到解决方案了吗?我有类似的问题,我找不到任何解决方案。

标签: python multithreading insert cassandra


【解决方案1】:

可能你正在使用 python GIL,但更有可能你做错了什么。

例如,将 2M 行放在一个批次中是做错了。

【讨论】:

  • 感谢您的回答。我不会将 2M 行放在一个批次中。每个线程连接数据库,插入 1M 行,批量配置 queue_size 为 1000。
  • 您应该从 contrib/stress 开始,因为这样您就知道负载生成部分不是问题。
【解决方案2】:

尝试在多个进程中运行多个客户端,而不是线程。

然后尝试不同的刀片尺寸。

3 分钟内 1M 次插入约为 5500 次/秒,这对于单个本地客户端来说已经相当不错了。在多核机器上,如果您使用多个客户端(可能插入小批量的行或单独的行),您应该能够获得此数量的数倍。

【讨论】:

  • 感谢您的帮助。我只是用多个进程(一个分叉)更改我的程序,但没有任何改进。我在想我的程序太复杂了:它读取 csv 文件,批量插入数据,然后将它们发送到数据库。我使用了 time 命令,用户时间大约是 2 分钟...对于单个本地客户端(具有 4 核),在同一时间安排我的程序和数据库可能太多了
【解决方案3】:

您可以考虑使用 Redis。它的单节点吞吐量应该更快。不过它与 Cassandra 不同,因此它是否是一个合适的选项取决于您的用例。

【讨论】:

  • 是的,我听说过 Redis,但它不适合我的数据模型,很遗憾......
【解决方案4】:

由于您插入了两倍的数据,因此花费的时间增加了一倍。您是否可能受 I/O 限制?

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 2018-01-12
    • 2015-03-10
    • 1970-01-01
    • 2023-03-27
    • 2017-06-03
    • 2017-08-13
    • 2016-07-12
    • 2016-07-25
    相关资源
    最近更新 更多