Скоро объявят официальную программу и начнётся регистрация.
Предварительная программа: http://codefest.ru/program/2012-03/
Цена будет > 3000 рублей.
Ну что, кто со мной?
Т.к. в наш технопарк приезжал Путин, у меня случился отгул. Будние дни отлично подходят для выезда в место, где в выходные не протолкнуться. Горнолыжные склоны относятся к таким местам.
Сегодня был Танай, на границе кемеровской и новосибирских областей. Невысокая гладкая горка, кресельные подъёмники и 5-6 склонов.
Горка отратрачена, льда нет, но местами есть затвердевший снег, без льда. В целом скучная горка, быстрые гладкие спуски. После шерегеша такие горки не вставляют.
Фотки:
Идём с парковки. Парковка бесплатная.
Миша
Выкат
Я
Лена и Миша
В интернетах бытует мнение, что хранить файлы в БД — школоло. Разрушаем стереотип с 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 за тесты.
Задача: хранить авторов к публикациям.
Делема: хранить авторов в отдельной коллекции или внутри документа публикации?
Решение #1:
{ "_id" : ObjectId("4dd491695072aefc456c9aca"), "username" : "alphareplicant", "email" : "roybatty@androids.org", "fullname" : "Roy Batty", "joined_at" : ISODate("2011-05-19T03:41:29.703Z"), "address" : { "street" : "13 Tannhauser Gate", "city" : "Caprica", "state" : "CC", "zipcode" : 512 }, } |
Решение #2:
{ _id : ObjectId("4dcd2abe5981aec801010000"), title : "The only perfect site is hind-site", content : "Loren ipsum dolor sit amet…", saved_at : ISODate('2011-05-16T18:42:57.949Z'), author_id : ObjectId("4dd491695072aefc456c9aca") } |
Так как же поступить?
Этот вопрос всегда возникает, при проектировании способа хранения данных. в nosql решениях.
Решение #1:
Плюсы: данные о авторе доступны в основном документе публикации, что экономит на количестве запросов в базу.
Минусы: Если документы существенно велики, и используется не курсор, а массив, для работы с данными. Можно допустить перерасход памяти.
решение #2:
Плюсы: лёгкие документы
Минусы: дополнительная коллекция, документы которой можно извлечь дополнительным запросом.
Признак бага:
ubuntu 11.10, в top много процессов зомби, родитель у которых fuser.
Решение:
в /etc/cron.d/php5
заменить скрипт на:
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete |
Подробнее: http://ubuntuforums.org/showthread.php?t=1862472&page=2
Когда вы делаете find(), драйвер MongoDB старше версии 1.1.0+ пошлёт запросы на получение данных на один из слейвов. Причём если вы его не определили при запросе, драйвер сам его выберет.
Автоматически будет выбран слейв с лучшим пингом =)
Более подробнее здесь http://www.php.net/manual/en/mongo.queries.php
Ну и всегда нужно понимать, что данные на слейве немного не актуальны, ядро важных операций заставляйте работать с мастером.
имхо очень хорошая штука.