Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Работа с большим объемом данных


Автор: proger 6.12.2011, 08:42
Здравствуйте, я работаю с большим количеством данных из базы mysql для построения отчетов. По опыту заметил, что щапросами получать данные для отчета медленее, чем взять нужные данные, записать в массив и потом их обрабатывать.
Запросы все оптимизированные. А нет ли лучшего способа чем считывать все в массив а потом проводить вычисления?

Автор: Nigel 6.12.2011, 11:34
Иногда лучше воспользоваться серверным языком для обработки данных, чем бд. Запросы к базе по своей сути должны быть  простыми, чтобы они выполнялись быстро. Поэтому имеет смысл посмотреть в сторону создания
дополнительных таблиц для агрегирования данных.

Автор: WolfAlone 6.12.2011, 13:25
Есть ещё 1 вариант, который можно попробовать, как мне кажется. Есть так называемые "NoSQL DB", возможно, стоит попробовать такую БД. Одна из таких БД: http://ru.wikipedia.org/wiki/MongoDB . Не могу сказать точно, так как я не специалист по "Не реляционным БД", но многие сходятся во мнении, что такие БД несколько производительнее MySQL в некоторых случаях. Возможно, Ваш случай, как раз 1 из таких.

Так же, можно попробовать РСУБД отличную отличную от MySQL например, Firebird или PostgreSQL. Ещё можно попробовать оптимизировать не только запросы к MySQL но и сам MySQL.

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

Более детальные рекомендации, я смогу Вам дать, если Вы уточните, о каком объёме данных идёт речь, что Вы с ними делаете, откуда они загружаются, пример запроса и пр. подробности.

Автор: proger 7.12.2011, 07:13
Всем огромное спасибо!

Автор: deperoff 10.12.2011, 20:26
Как вариант-ещё есть мемкэш.

Автор: vfz4z 22.12.2011, 14:15
да, мемкэш реально помогает при больших нагрузках, когда оптимизировать уже нечего)

Автор: MuToGeN 10.1.2012, 03:02
Многие, кстати, нынче пользуют ту же mongo вместо мемкеша, тупо как хранилище всей фигни в виде ключ-значение.
MongoDB поможет в том случае, если выборка идет по одной коллекции (наиболее близкое по смыслу понятие к "таблице" в РСУБД). Никаких JOIN-ов там не будет, всё это придется делать вручную. А так, в целом - отличная вещь для обработки больших объемов информации. С Firebird не пересекался, но вот постгрес однозначно медленнее мускуля на больших объемах данных.
А по части непосредственно мускуля мне в своё время пригодилось вот это: http://dev.mysql.com/doc/refman/5.1/en/optimizing-the-server.html

Автор: skyboy 11.1.2012, 11:28
для ускорения и упрощения агрегирования информации есть такой механизм, как OLAP. некоторые СУБД его реализуют(например, MS SQL или  Oracle)
вдогонку, кое-что http://www.mysqlperformanceblog.com/2010/07/12/intro-to-olap/

Автор: Agnosticus 2.3.2012, 13:18
В отличие от MongoDB, мемкеш все в ОЗУ хранит, поэтому скорость отдачи максимальная

Автор: Stark 2.3.2012, 14:11
большой объм даних это сколько?

можно примери структури таблиц и типы запросов? тогда может будут более конкретные советы.

Автор: krundetz 2.3.2012, 15:19
Цитата(proger @  6.12.2011,  08:42 Найти цитируемый пост)
Запросы все оптимизированные.

а таблицы?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)