У меня были похожие темы, такие как Постоянное соединение с базой данных Django и другие материалы по той же теме.Однако 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 создавать новое соединение с БД на каждомcall.
Кроме того, пакетная вставка должна сделать вещи еще лучше, сократив количество вызовов к 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: количество попыток подключения (успешно или нет) к серверу MySQL. Так что это из-за какой-то проблемы, в которой я занимаюсь сохранением строки, используяDjango ORM для MySQL или ожидается такое количество соединений?
Однако после использования моего подхода число соединений не увеличилось.
решено
Смутился, прочитав определение о Connections. Так что, наконец, понял это, выполнив тест.Вставил 19 записей в БД, количество подключений увеличилось на то же число. Так что я считаю, что это означает, сколько раз с БД связывались. Так что в этом случае лучше всего использовать встроенные в Django вещи.
http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html говорит о том, что максимальное количество соединений составляет 151, так что в любом случае это было неверное толкование с моей стороны.