【发布时间】:2012-01-20 03:05:59
【问题描述】:
我已经讨论过类似的主题,例如 Django persistent database connection 和其他关于同一主题的内容。 然而 Django 并没有正式支持与 MySQL 和 Mongo 的持久连接(据我所知)。所以我尝试避免很多东西并尝试使其简单。所以我所做的是在我的 views.py 中为MongoDB 和 MySQL,类似于:
from pymongo import Connection
import MySQLdb
global mongo_connection,mongo_db,collection,mysql_connection,mysql_cursor
mysql_connection = MySQLdb.connect (host = "localhost",
user = "root",
passwd = "password",
db = "demo")
mysql_cursor = mysql_connection.cursor ()
mongo_connection = Connection()
mongo_db = mongo_connection.test_database
collection = mongo_db.test_collection
因此,在此之后,当根据请求的 URL 调用所需的视图时,我将数据转储到两个数据库中。喜欢:
mysql_cursor.execute('''INSERT INTO
table_name(l,n_n,n_id,s_n,s_id,u,r) VALUES
(%s,%s,%s,%s,%s,%s,%s)''',
(l,n_n,n_id,s_name,s_id,u,re)
)
同样,我为保存到 MongoDB 所做的。
显然这种方法存在一个缺陷,即我没有在任何地方关闭连接。但是这种方法似乎确实有效并且运作良好。
为什么不使用这种方法?
我如何衡量我通过使用这种方法获得的性能改进与让 Django 在每次调用时创建与数据库的新连接。
另外,批量插入应该通过减少对 DB 的调用来使事情变得更好。如何在视图定义中实现这样的概念?
这是在我使用我的方法尝试建立持久连接并让 Django 处理它之前我的应用程序的行为
mysql> show status like '%onn%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| Aborted_connects | 0 |
| Connections | 164359 |
| Max_used_connections | 3 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 1 |
+--------------------------+--------+
7 rows in set (0.00 sec)
几秒钟后,当我运行相同的查询时,我得到了:
mysql> show status like '%onn%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| Aborted_connects | 0 |
| Connections | 175047 |
| Max_used_connections | 3 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 1 |
+--------------------------+--------+
7 rows in set (0.00 sec)
http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html#statvar_Connections 声明 Connection:The number of connection attempts (success or not) to the MySQL server.So it is due to some problem where I handle save a row using Django ORM for MySQL or is this sort number预期的连接数?
但是使用我的方法后,连接数并没有增加。
已解决
阅读关于连接的定义感到困惑。所以最后通过测试弄明白了。 在数据库中插入了 19 条记录,连接数增加了相同的数量。所以我相信这意味着数据库被联系的次数。所以在这种情况下,使用 Django 的内置东西是最好的方法。
http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html 表示最大连接数为 151,所以无论如何这是我的误解。
【问题讨论】:
-
在带有多个全局变量的第三行代码后停止阅读。
标签: python mysql django mongodb mysql-python