On 4/30/15 11:00 AM, Victor Stinner wrote:
Hi,

I propose to replace mysql-python with mysqlclient in OpenStack applications to 
get Python 3 support, bug fixes and some new features (support MariaDB's 
libmysqlclient.so, support microsecond in TIME column).

It is not feasible to use MySQLclient in Python 2 because it uses the same module name as Python-MySQL, and would wreak havoc with distro packaging and many other things. It is also imprudent to switch production openstack applications to a driver that is new and untested (even though it is a port), nor is it necessary. There should be no reason Openstack applications are hardcoded to one database driver. The approach should be simply that in Python 3, the mysqlclient library is installed instead of mysql-python. MySQLclient installs under the same name, so in this case there isn't even any change to the SQLAlchemy URL required.


The MySQL database is popular, but the Python driver mysql-python doesn't look 
to be maintained anymore. The latest commit was done in january 2014, before 
the release of MySQL-python 1.2.5:

    https://github.com/farcepest/MySQLdb1/commits/master

One major issue is that mysql-python doesn't support Python 3. It blocks 
porting most OpenStack applications to Python 3. There are now 32 open issues 
and 25 pending pull requests. I also sent an email to Andy Dustman (aka 
farcepest) last week, but I didn't get any reply yet.


There is an open discussion to replace mysql-python with PyMySQL, but PyMySQL 
has worse performance:

    https://wiki.openstack.org/wiki/PyMySQL_evaluation
PyMySQL is monkeypatchable, so as long as we are using eventlet, it is *insane* that we are using MySQL-Python at all, because it is actively making openstack applications perform much much more poorly than if we just removed eventlet. So as long as eventlet is running, PyMySQL wins the performance argument hands down (as described at the link http://www.diamondtin.com/2014/sqlalchemy-gevent-mysql-python-drivers-comparison/ which is in the third paragraph of that wiki page). And it's Py3k compatible.

The performance results in that wiki page are also out of date. Naoki INADA has merged several performance improvements since then.

My ultimate setup would still use mysql-python Py2K / MySQLclient Py3K, and Openstack applications would again use traditional threads for database APIs. But that is two changes.


so to sum up:


1. keep Mysql-python on Py2K, use mysqlclient on py3k, changing the implementation of the "MySQLdb" module on Py2K, server-wide, would be very disruptive

2. if we actually care about performance, we either A. dump eventlet or B. use pymysql. All other performance arguments are moot right now as we are in the basement.



__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to