RSS Записей | RSS Комментариев
Ядоблог - Stay upwind

Архив ‘Оптимизация’ Категории

MongoDB, хранение файлов в базе

февраля 13, 2012 | 5 Комментариев

В интернетах бытует мнение, что хранить файлы в БД — школоло. Разрушаем стереотип с Mongo GridFS.

Введение:
MongoDB предоставляет возможность хранить файлы любого размера в Mongo GridFS
Для драйвера PHP — это обычная коллекция, в которой есть поле для хранения бинарных данных.
Бинарные данные в свою очередь разбиваются на чунки(небольшие куски).
Бинарные данные можно извлечь как целиком, так и почунково(это экономит память).

Плюсы хранения данных в БД MongoDB:
MongoDB может хранить миллионы файлов в БД, хранение такого объёма данных в файловой системе может вызвать проблемы(начиная с IO проблем, заканчивая проблемами доступа к данным из разных серверов).
MongoDB реплицирует данные на все сервера, что упрощает доступ к данным на отдельно взятом сервере.
Нет проблем с бекапами и целостностью данных на разных серверах. надёжность обеспечивается MongoDB.
К загруженному файлу можно прикрепить метаданные (описание, комментарии, лайки, и.т.д.)
Т.к. файлы хранятся в чунках — можно работать с любой частью файла.

Минусы:
Быстродействие ниже, чем nginx + файловая истема. Сравним:
nginx + файловая система, получаем 6559.31 операций в секунду
apache + файловая система: получаем 2625.37 операций в секунду
nginx + модуль nginx-gridfs, получаем 1083.88 операций в секунду

Вывод: nginx + fs на высоте, но это решение не даёт масштабируемости и гибкости.
nginx + nginx-gridfs даёт приличные результаты, которые существенно возрастут, при использовании нескольких серверов MongoDB.

Благодарность, http://tokarchuk.ru за тесты.

Часто ли вы проверяете на нагрузочное тестирование сайты?

января 11, 2011 | 3 Комментариев

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

если вы линупсоид,выполните

ab -c 100 -n 10000 http://мой_сайт.ru/

Эта команда выполнит лёгенький ддос на ваш сайт(10000 запросов суммарно по 100 запросов параллельно) =)
что интересного можно узнать из результата:

Нажать

Нажать

Ну вот, кроме всяких скоростей есть поле failed requests. Это количество ошибок. Если их нет, то хорошо.

Естественно такие данные как ниже вас должны ввергать в неконтроллируемый страх и ужос, как и повёл себя товарищ пилящий =)

Кликабельно

Кликабельно

MySQL, оптимизация.

августа 28, 2010 | Комментариев нет

Как выжать из нашей ласточки всё по максимуму?

1. Как показывает практика, можно увеличить скорость работы запросов в 10-15 раз, составив правильный индекс на таблицы. Проанализируйте основные свои запросы к базе данных и составьте индекс из всех полей, которые являются критериями выборки.

Например, вы обнаружили что очень много подобных запросов:

select * from price_items_params where price_item_id=1 and price_param_group=’Наличие в магазине’ and price_param_name=’РВ’

в таких случаях рекомендуется повесить на таблицу price_items_params составной индекс из полей price_item_id, price_param_group, price_param_name.

Ну, и не делайте поля типа Text(по возможности) они неопределённой длины, что затрудняет работу с ними.


© 2010 Ядоблог. Все права защишены.
Powered by Лаборатория Яда. Написать администратору