Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 10, 2007 16:56:06

wNomad
От:
Зарегистрирован: 2007-08-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по mysql и insert

Всем привет.

Исспользую sqlalchemy для управления базой MySQL. База на том же компьютере, где выполняется скрипт

0. Для подключения как в примере вызываю create_engine( “mysql://localhost/dbname” ). Не вызывает ли это некую эмуляцию передачи по сети, которая замедляет суммарную резвость передачи? Нету ли других возможностей подключения напрямую?

1. Намного ли быстрее ли добавлять данные из списка одним вызовом insert и передачей ему этого списка, чем просто в цыкле по списку вызывать insert для каждого элемента?
Проверял ли кто?



Офлайн

#2 Авг. 10, 2007 22:36:34

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопросы по mysql и insert

Через localhost - значит через loopback интерфейс. Исключительно программный. Издержки поизводительности пренебирежимо малы.
Производительность добавляют транзакции.
Всунь цикл в транзакцию - и получишь отличную скорость.
Проверял. Тормоза Питона на цикл опять же пренебрежимо малы в этом случае.



Офлайн

#3 Авг. 11, 2007 20:48:33

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по mysql и insert

Андрей Светлов
Через localhost - значит через loopback интерфейс.
Оно все равно не через loopback идет. Клиентская библиотека mysql самостоятельно заменяет соединение на unix socket если подключение через localhost.
wNomad
Намного ли быстрее ли добавлять данные из списка одним вызовом insert и передачей ему этого списка, чем просто в цыкле по списку вызывать insert для каждого элемента?
Про транзакции уже написали. Еще важный момент - использовать параметризованный запрос, чтобы сервер не нагружать prepare запроса для вставки каждой записи. Хотя, возможно, mysqldb умеет самостоятельно преобразовывать запросы в параметризованные, не знаю…



Офлайн

#4 Авг. 11, 2007 22:44:24

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопросы по mysql и insert

OlDer
Оно все равно не через loopback идет. Клиентская библиотека mysql самостоятельно заменяет соединение на unix socket если подключение через localhost.
Спасибо, что поправили. Но, по моему, что в лоб, что по лбу. Т.е. все равно - очень быстро.
OlDer
Про транзакции уже написали. Еще важный момент - использовать параметризованный запрос, чтобы сервер не нагружать prepare запроса для вставки каждой записи. Хотя, возможно, mysqldb умеет самостоятельно преобразовывать запросы в параметризованные, не знаю…
Кажется, самостоятельно никто толком не умеет. Действительно ценное дополнение. Только вопрос один. Сервер нагружается или клиент?
Я почему-то всегда думал, что подготовка запроса сильно убивает клиентскую сторону. А серверная только с подготовленными запросами и работает. Может быть, я крупно ошибаюсь.
На ценность замечания это никак не влияет. Не важно, какой именно процесс тратит драгоценное время. Ведь все они живут на одной машине.



Офлайн

#5 Авг. 14, 2007 11:23:34

wNomad
От:
Зарегистрирован: 2007-08-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по mysql и insert

Спасибо за ответы.

Еще маленький вопрос. Для того, чтобы использовать транзакции, нужно ли перевести таблицу с MyISAM на InnoDB?



Офлайн

#6 Авг. 14, 2007 12:54:08

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопросы по mysql и insert

Угу



Офлайн

#7 Авг. 14, 2007 17:38:38

wNomad
От:
Зарегистрирован: 2007-08-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по mysql и insert

Последний ньюбский вопрос по базам:

Ничего страшного, если переведу базу на движок с поддержкой транзакций, и в многопоточном приложении один поток будет к базе обращаться по старинке без сессий/транзакций, как и было до этого, а тот, который с низкой производительностью, будет переведен на этот более быстрый механизм?



Офлайн

#8 Авг. 15, 2007 02:51:10

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопросы по mysql и insert

Я привык рассматривать вопрос просто. Если без транзакций - то каждый запрос оформляется как отдельная транзакция. AUTOCOMMIT. Ничего страшного не происходит. Если транзакции есть - COMMIT выполняется вручную. Если есть поддержка XA транзакций, они же двухпроходные - транзакцию можно контроллировано выполнять работая с несколькими базами как с единой системой.
Не являюсь гуру в базах данных. Может, спецы укажут на список тонких моментов. Но для моих разработок этот подход срабатывал :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version