Форум сайта python.su
Здравствуйте.
У меня есть база в которую пишется статистика по трафику. Трафика много, базы большие - часовая табличка от 2 до 40 миллионов записей. Хранить это все в базе не очень выгодно, поэтому пишу скрипт который должен распарсить базу, сложить данные в текстовик и заархивировать.
Скрипт по выборке не сложный как мне казалось, получилось примерно так:
import MySQLdb db = MySQLdb.connect(host="localhost", user="", passwd="", db="detailed", charset='utf8') cursor = db.cursor() ... sql1 = "SELECT `agent`, `src_ip`, `src_class`, `src_mask`, `src_as`, `dst_ip`, `dst_class`, `dst_mask`, `dst_as`, `in_if`, `out_if`, `pkts`, `bytes` FROM `{0}`".format(i[0]) cursor.execute(sql1) data = cursor.fetchall() ...
Офлайн
М-да, вот я уж этого инженера, который это всё придумал в Мускуле держать, за горло бы подержал.
Вам надо срочно на Редис переходить! А то сначала в файлы текстовые, а потом как парсить то их будете?
Офлайн
Вариантов много, но идея одна - не запрашивать слишком много данных за раз
Офлайн
adrayиспользовать LIMIT
другое
Офлайн
FishHook+1 за постраничную выборку вместо выборки всей таблицы с сотнями миллионов записей.
использовать LIMIT
Отредактировано Lexander (Ноя. 28, 2012 18:54:07)
Офлайн
cursor.fetchall()
for rec in cursor:
.....
Офлайн
doza_and
Насколько я понял, дефолтное mysql-connection возвращает cursor, который хранит результаты на стороне клиента, так что итератор будет возвращать данные из уже созданного списка.
for rec in cursor: .....
Отредактировано adray (Ноя. 28, 2012 21:31:44)
Офлайн
А я бы для хранения статистики пользовал что нибудь типа RRD
Офлайн
Кстати, а чем не устраивает лог-файл веб-сервера?
Для их обработки и формирования статистики полно специализированных утилит.
Офлайн
Спасибо всем за ответы.
Отдельная благодарность doza_and и adray. Переписал как в топике http://stackoverflow.com/questions/1808150/how-to-efficiently-use-mysqldb-sscursor и теперь скрипт память не кушает и прекрасно работает.
Почему не в файл? Так сложилось исторически. Эта база хранит статистику по трафику, какой IP c каким IP общался. Это нужно для клиентов и всяких там правоохранительных органов. Сейчас эта база живет два месяца в mysql для того что бы клиентам можно было быстро и удобно предоставить статистику, а затем парситься и складывается в тхт и архивируется. И делается это все перловым скриптом без проблем . Но сам сервер базы уже не справляется ( особенно когда прилетают доссы на сотни тысяч пакетов секунд, база тогда вырастает в несколько раз). Переезжаем на новые сервер и на пайтон
PooH, RRD, конечно же, используется, но это же что бы графички рисовать, а в этом случае нужно все и навсегда сохранить.
Lexander, у нас не веб сервер, а Netflow.
Офлайн