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了

后记

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

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


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

查看所有标签

猜你喜欢:

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

Java语言程序设计

Java语言程序设计

(美) Y. Daniel Liang / 李娜 / 机械工业出版社 / 2011-6 / 79.00元

本书是Java语言的经典教材,畅销多年不衰。本书全面整合了Java的特性,采用“先讲基础”的教学方式,循序渐进地介绍了程序设计基础、面向对象程序设计、GUI程序设计等。另外,本书还全面且深入地覆盖了一些高级主题,包括算法和数据结构、并发、网络、国际化、高级GUI、数据库和Web程序设计等。 本书中文版由《Java语言程序设计 基础篇》和《Java语言程序设计 进阶篇》组成。基础篇对应原书的第......一起来看看 《Java语言程序设计》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具