| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
а таблицы? |