Найти - Пользователи
Полная версия: Вопросы по mysql и insert
Начало » Базы данных » Вопросы по mysql и insert
1
wNomad
Всем привет.

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

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

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

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

Ничего страшного, если переведу базу на движок с поддержкой транзакций, и в многопоточном приложении один поток будет к базе обращаться по старинке без сессий/транзакций, как и было до этого, а тот, который с низкой производительностью, будет переведен на этот более быстрый механизм?
Андрей Светлов
Я привык рассматривать вопрос просто. Если без транзакций - то каждый запрос оформляется как отдельная транзакция. AUTOCOMMIT. Ничего страшного не происходит. Если транзакции есть - COMMIT выполняется вручную. Если есть поддержка XA транзакций, они же двухпроходные - транзакцию можно контроллировано выполнять работая с несколькими базами как с единой системой.
Не являюсь гуру в базах данных. Может, спецы укажут на список тонких моментов. Но для моих разработок этот подход срабатывал :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB