Python + Cassandra的一些性能优化

栏目: 数据库 · 发布时间: 6年前

内容简介:这一篇文章, 主要讲的是如何优化python client的性能, 不是Cassandra本身的性能优化.Cassandra本身的性能优化, 主要是对DB Schema的设计上面的优化.那python client 为什么需要优化呢?

这一篇文章, 主要讲的是如何优化python client的性能, 不是Cassandra本身的性能优化.

Cassandra本身的性能优化, 主要是对DB Schema的设计上面的优化.

那python client 为什么需要优化呢?

正在进行的一个项目就遇到这种情况, 无论如何优化, 性能就是无法提升. 一直维持在2000条/s的水平. 这个时候发现:

1. 只使用了单核cpu

2. 这一颗CPU已经100%

官方其实已经有一些关于性能优化的建议与文章, 但是感觉有的并不实用. 作者根据自己的实际操作的经验, 总结了一下几点.

使用 Docker 作为运行环境

其实这个优化, 是架构上面的. 但是个人认为, 这一点能极大的方便后面的步骤.

最大的原因: 可以比较放心大胆的修改环境配置, 而不用担心改动影响其他的应用.

使用LibevConnection

这个C扩展的安装非常简单, 如下:

# Debian/Ubuntu
sudo apt-get install libev4 libev-dev
 
# RHEL/CentOS/Fedora:
sudo yum install libev libev-devel
 
# Mac OS X
brew install libev
 
 

但是, 如果是先安装 cassandra-driver 再安装上面的Libev相关扩展, 就不会起作用. 一定要保证先安装Libev相关类库再安装 cassandra-driver

如果先安装了 cassandra-driver 呢?

这个时候基于docker的环境优势就出现了 –> 重新起一个干净的docker环境, 先安装libev再安装 cassandra-driver

我们来看看效果吧

没有安装libev

1.38038516045 2000 / 3833226 19FB9D48-19C2-5926-A393-8875C1C71C3C
1.37041091919 4000 / 3833226 3378602E-A7BA-5525-9D5F-F4587969341C
1.18457198143 6000 / 3833226 4EA8FD48-7F2F-5659-A905-0691E43B4524
1.34388303757 8000 / 3833226 6A1B2F89-A4C5-57B0-9C3E-8CF30CBBB184
1.11398482323 10000 / 3833226 8531F555-86EE-5627-BE80-8DF0DF2B2882
1.32416796684 12000 / 3833226 9FE33BF4-FBB1-5059-A3CC-CDF19B1439F6
1.30097103119 14000 / 3833226 BAE9B586-E217-5868-B7A2-71328A8B5430
1.08711099625 16000 / 3833226 D4614E70-848A-5AF9-9843-3107A38541DD
1.33533000946 18000 / 3833226 EEEC0F1F-8920-5A9E-8004-51FCBCDBCE21
1.26504683495 20000 / 3833226 08962BA3-1C8D-503A-A51A-890F37922290
1.12752485275 22000 / 3833226 22ACF7D1-7D32-5A0C-8705-BC2C9C4CC16F
1.31155800819 24000 / 3833226 3D553556-2763-5A75-9688-36A2DFB71BD7
1.2681479454 26000 / 3833226 57E9AE03-E3E5-5A34-A039-E7D779E23D4C
1.11450314522 28000 / 3833226 71B18DE5-834C-5E18-8BF1-C7F19A8774F5
1.28991603851 30000 / 3833226 8C1E0A7E-F002-5C86-B874-249D7F1A5E59
 

结论:

每2000条数据耗时1.25s左右

安装了libev

1.12146306038 2000 / 3833226 19FB9D48-19C2-5926-A393-8875C1C71C3C
1.23479604721 4000 / 3833226 3378602E-A7BA-5525-9D5F-F4587969341C
1.40026903152 6000 / 3833226 4EA8FD48-7F2F-5659-A905-0691E43B4524
1.07486104965 8000 / 3833226 6A1B2F89-A4C5-57B0-9C3E-8CF30CBBB184
1.26636004448 10000 / 3833226 8531F555-86EE-5627-BE80-8DF0DF2B2882
1.10501003265 12000 / 3833226 9FE33BF4-FBB1-5059-A3CC-CDF19B1439F6
1.38248705864 14000 / 3833226 BAE9B586-E217-5868-B7A2-71328A8B5430
1.28945398331 16000 / 3833226 D4614E70-848A-5AF9-9843-3107A38541DD
1.11319279671 18000 / 3833226 EEEC0F1F-8920-5A9E-8004-51FCBCDBCE21
1.30120897293 20000 / 3833226 08962BA3-1C8D-503A-A51A-890F37922290
1.40880990028 22000 / 3833226 22ACF7D1-7D32-5A0C-8705-BC2C9C4CC16F
1.09090089798 24000 / 3833226 3D553556-2763-5A75-9688-36A2DFB71BD7
1.24485397339 26000 / 3833226 57E9AE03-E3E5-5A34-A039-E7D779E23D4C
1.29466509819 28000 / 3833226 71B18DE5-834C-5E18-8BF1-C7F19A8774F5
1.16280698776 30000 / 3833226 8C1E0A7E-F002-5C86-B874-249D7F1A5E59
 

结论:

没有具体计算平均值, 但是可以看到略微降低了一些.

默认的是使用Cython, 所以实际上已经有一些C的优化效果了. 这里只是看到有略微提升

是否使用PyPy?

PyPy使用了完全不同的 Python 解释器, 如果使用PyPy需要把其他环境重新安装一次. 因此, 如果在你的环境可以达到这一点, 非常建议使用PyPy

根据官方测试, 使用PyPy, 性能可以提升1倍!

参考:

https://docs.datastax.com/en/drivers/python/2.6/performance.html

使用多进程

上面提到, 单颗CPU的使用率已经100%, 要想明显提升就一定需要使用多核的能力.

如果你像我一样, 是在jupyternotebook上面进行开发, 可能要面对, 如果是多进程运行, 在notebook上面的状态, 可能就不能显示是busy了. 具体原因另外开篇来讲.

使用多进程, 需要注意的是, cluster / session 需要在进程内部来创建, 不能在多个进程之间互相共享. 不光是Cassandra, 其他的数据库链接也是这样.

使用Batch Futures

这个直接看官方代码会比较合适.

参考: https://github.com/datastax/python-driver/blob/master/tests/integration/long/test_large_data.py#L72

注意: 原文的 concurrency 只设置成10. 你可以根据自己的环境来进行调节. 我自己的设置成2000了

后记

这一篇文章写得有点随意了. 娃娃还在旁边吵…

本文原创, 转载需要注明出处:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Computer Age Statistical Inference

Computer Age Statistical Inference

Bradley Efron、Trevor Hastie / Cambridge University Press / 2016-7-21 / USD 74.99

The twenty-first century has seen a breathtaking expansion of statistical methodology, both in scope and in influence. 'Big data', 'data science', and 'machine learning' have become familiar terms in ......一起来看看 《Computer Age Statistical Inference》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具