Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) MySQL большая таблица (число прочтений - 3445 )
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
MySQL большая таблица
05. Марта 2011 :: 16:53
Печать  
Может кто поможет с MySQL.

Есть таблица InnoDB в миллион строк:
Код
Выбрать все
domain_name varchar(255) - адрес сайта
domain_name_md5 binary(32) primary key - md5 хеш адреса
rank0_date date indexed - дата последнего обновления
rank0 int(4) - позиция на дату последнего обновления
rank1 int(4) - позиция сайта на день раньше
...
rank89 int(4) - позиция сайта за 30 дней до даты последнего обновления
growth_1d int(4) indexed - изменение позиции сайта за последний день
growth_1w int(4) indexed - изменение позиции сайта за последнюю неделю
growth_2w int(4) indexed -  - изменение позиции сайта за последние две недели
... 


раз в день я обновляю эту таблицы новыми данными: обновляю поля rank0-rank89 и пересчитываю growth_1d и остальные.
делается в питоне.
1. считываю из текст. файла данные о позициях
2. нахожу через select предыдущие данные обрабатываемого сайтаю select * from ranks where domain_name_md5=md5(domain_name)
3. делаю расчеты growth_1d и остальных
4. через update обновляю запись. (или insert если сайта еще нет в базе)
5. каждые 10,000 сайтов делаю commit.

на все это уходит около часа.
нужно быстрее.

что приходит в голову (проверить смогу уже в понедельник) из того, что почитал в инете:
а. убрать primary index c domain_name_md5 - он присоединяется к другим индексам замедляя работу (http://www.youtube.com/watch?v=u70mkgDnDdU). создать поле domain_id c primary key
б. на шаге 2 не использовать select * - тоже замедляет работу. перечислить все поля.
в. использовать LOAD DATA INFILE (http://dev.mysql.com/doc/refman/5.1/en/load-data.html). сначала заполнить текстовый файл новыми данными, скормить его LOAD DATA INFILE для создания новой (временной) таблицы. заменить старую таблицу новой.

есть идеи?
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: MySQL большая таблица
Ответ #1 - 08. Марта 2011 :: 07:26
Печать  
не смог добиться нужной производительности. перехожу на кассандру
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: MySQL большая таблица
Ответ #2 - 09. Марта 2011 :: 02:43
Печать  
Думаю, стоит большую часть пересчетов занести в хранимки - это будет всяко быстрее.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: MySQL большая таблица
Ответ #3 - 09. Марта 2011 :: 06:31
Печать  
blindvic писал(а) 05. Марта 2011 :: 16:53:
в. использовать LOAD DATA INFILE (http://dev.mysql.com/doc/refman/5.1/en/load-data.html). сначала заполнить текстовый файл новыми данными, скормить его LOAD DATA INFILE для создания новой (временной) таблицы. заменить старую таблицу новой.


это в свое время сильно помогло, масштабы правда были не такие..
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: MySQL большая таблица
Ответ #4 - 09. Марта 2011 :: 20:06
Печать  
Кассандра - зверь. то же самое сделала за 10 минут.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: MySQL большая таблица
Ответ #5 - 09. Марта 2011 :: 20:47
Печать  
blindvic писал(а) 09. Марта 2011 :: 20:06:
Кассандра - зверь. то же самое сделала за 10 минут.

Что такое Кассандра?
  
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: MySQL большая таблица
Ответ #6 - 10. Марта 2011 :: 05:12
Печать  
trdm писал(а) 09. Марта 2011 :: 20:47:
Что такое Кассандра?

Видимо это: http://cassandra.apache.org/
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: MySQL большая таблица
Ответ #7 - 10. Марта 2011 :: 05:20
Печать  
blindvic писал(а) 09. Марта 2011 :: 20:06:
Кассандра - зверь. то же самое сделала за 10 минут.

А в MySQL не пробовал это: http://l-o-n-g.livejournal.com/153756.html
UPD: Там в коментах ссылка на HandlerSocekt client for Python: http://pypi.python.org/pypi/handlersocket/
  
Наверх
ICQ  
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: MySQL большая таблица
Ответ #8 - 10. Марта 2011 :: 19:43
Печать  
спасибо за ссылку! как-нить попробую
правда, если я правильно понял, основной выигрыш в чтении.
а у меня много записывать надо.
Цитата:
Unlike most systems, in Cassandra writes are faster than reads
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: MySQL большая таблица
Ответ #9 - 11. Марта 2011 :: 08:41
Печать  
blindvic писал(а) 10. Марта 2011 :: 19:43:
...
а у меня много записывать надо.

В статье написано
Цитата:
Поддерживаются операции INSERT/UPDATE/DELETE. Операции, не использующие ключи — не поддерживаются.

Описание из документации https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/pr...
Цитата:
Inserting data

The 'insert' request has the following syntax.

   <indexid> '+' <vlen> <v1> ... <vn>

- <vlen> indicates the length of the trailing parameters <v1> ... <vn>. This
 must be smaller than or equal to the length of <columns> specified by the
 corresponding 'open_index' request.
- <v1> ... <vn> specify the column values to set. For columns not in
 <columns>, the default values for each column are set.
  
Наверх
ICQ  
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: MySQL большая таблица
Ответ #10 - 11. Марта 2011 :: 19:58
Печать  
спасибо
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать