Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 4, 2012 13:16:44

Elka
Зарегистрирован: 2012-04-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Я уже спрашивала на этом форуме о работе с базой данных:
http://python.su/forum/topic/14442/?page=1

Кратко задача такая:
Есть база данных белков, в которой порядка 11 миллионов записей. Периодически нужно делать выборки, а так же записывать в нее много данных. База данных - sqlite.
На моем домашнем компьютере запись данных (около 10 тысяч) в базу данных занимает несколько часов.
Так жить нельзя

Данные записываются примерно так:

cu.executemany("UPDATE  proteins SET taxon=?, status=? WHERE ID=?", datum)
datum - это лист из tuples.

Что можно сделать, чтобы все это работало в приемлимое время? Поменять базу данных? Переписать код? Поменять компьютер (а если так, то какие минимальные требования)?

Офлайн

#2 Июнь 4, 2012 13:26:55

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Надеюсь индекс по полю ID создан?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Июнь 4, 2012 15:13:55

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Проверьте, использует ли executemany одну транзакцию. Скорее всего да, но проверить не помешает.
Вот здесь основные приемы оптимизации Sqlite описаны: http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html



Офлайн

#4 Июнь 4, 2012 17:55:43

Elka
Зарегистрирован: 2012-04-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Спасибо, пойду читать

Офлайн

#5 Июнь 4, 2012 21:02:49

Elka
Зарегистрирован: 2012-04-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Проверьте, использует ли executemany одну транзакцию. Скорее всего да, но проверить не помешает.
А как это проверить?

Надеюсь индекс по полю ID создан?
О глупый я человек, женщина! Нет, не создан.
Пойду разбираться, как это делать.

Офлайн

#6 Июнь 5, 2012 05:36:16

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Elka
Нет, не создан.
Пойду разбираться, как это делать.
Один момент, если поле описано как
ID PRIMARY KEY
то индекс уже создан неявно
а вот если
ID INTEGER
тогда да, надо его добавить



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Июнь 7, 2012 11:51:46

Elka
Зарегистрирован: 2012-04-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Всем спасибо за советы!
Помогли индексация и изменение размера кеша в памяти при обновлении. К тому же нашла еще в коде ошибку, из-за которой тоже были заметные тормоза.

Офлайн

#8 Июнь 7, 2012 18:53:08

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Ну и сколько по времени сейчас это занимает?



Офлайн

#9 Июнь 9, 2012 00:15:12

Elka
Зарегистрирован: 2012-04-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ускорить работу с базой данных?

Порядка секунды (или меньше), точно время не засекала, но очень быстро.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version