Daos держит нагрузки
29.10.2009 мои проекты
Выпускаю очередное обновление. Спасибо покупателям, которые провели испытания в боевых условиях: оказалось, что при 100 тыс. запросов в сутки с Daos происходили некоторые неприятные вещи… если быть точным, то просто сбрасывались все объявления. Извините, не ожидал такого поведения.
Дело в том, что запись данных происходила через file_put_contents без блокировки файла. Теперь, в новой версии файл данных блокируется до завершения записи. Надеюсь, должно замечательно работать при любых нагрузках.
P.S. Спасибо Edogs (Очень оперативно помог) и Aktuba (Тоже, кстати, имеет ресурсы для экстремального тестирования)за ликбез.
Комментарии
Комментирование этой статьи закрыто.
Увы и ах не держит опять. Через ~ 1,5 часа снова база обнулилась чудестным образом
Перерыл инет – везде советуют делать через временный файл.
P.S.: вынеси работу с файлом в одно место, чтобы не править несколько кусков кода.
http://spectator.ru/technology/php/flock_workaround
а sqlite чем не решение? для таких целей как раз
2Jungle: наверное тем, что не все хостинги поддерживают + нет необходимости в базе из-за одной записи ;)
Аватар, ну вот, блин, радостное пробуждение :(
Хвалёный flock всё же подвёл.
Aktuba, спасибо за ссылку на спектатора. Сейчас позавтракаю и переделаю под переименование. Правда, всё равно что-то беспокоит меня в этом решении.
Jungle, нужна максимальная независимость от платформ. Если уж использовать базу, то MySQL. Просто я считаю её слишком жирной для такого проекта. Хранить-то надо совсем немного.
Видимо без мускуля не обойтись. Всё таки нагрузки – уязвимое место текстовой БД.
Проверь почту – там я тебе прислал ссылку на разъяснение по flock…
> Правда, всё равно что-то беспокоит меня в этом решении
ну да, если чтение будет произведено в тот момент, когда файл будет отсутствовать во время unlink или rename – это будет не айс
надо чтение ф цыкл поставить тогда штоли :)
второй момент – если файл будет залочен при чтении, и функцея записи попытается сделать те же unlink/rename – она обломаецо
опять цыкл напрашиваетца
Проблема ещё и в том, что настройки читаются как include(‘rewriteFile’), значит, есть вероятность чтения недозаписнного файла, на include блокировки не действуют. Возможно, придётся и чтение полностью переписывать и формат базы :(
2yaman: плохие идеи. очень плохие.
ну так, sqlite у многих по дефолту стоит и потом чем изобретать велосипед, лучше воспользоваться готовым решением, ИМХО
или на крайняк использовать Berkeley DB или его аналоги http://ru2.php.net/manual/en/dba.requirements.php
http://www.php.net/manual/en/function.dba-open.php
не уж то блокировка файла в php не справляется?
Jungle, просто блокировать файл при чтении тоже надо, см. выше. Я вчера сделал какое-то половинчатое решение, потому оно и не работает как надо.
Тормоз, в зависимости от mysql нет ничего критичного по одной простой причине: Daos имеет смысл ставиьт только на сайты с нормальной посещаемостью, которые в подавляющем большинстве случаев уже используют mysql. И даже если не используют, то хостер ее обязательно предоставляет.
Alek$, сделаю признание: я до сих пор ни разу не работал с MySQL из скриптов :) Это пока останавливает.
И вторая причина — немного сложнее для пользователя будет установка, ведь тогда надо указывать сервер базы, имя базы данных, логин/пароль. Муторно.
Да и согласись, что смысла особого нет? Данных очень мало, не для MySQL эта задача.
Привет. Хочу взять у тебя интервью о твоем блоге. Напишу о нем пост. бесплатно.
Я за мускул. Проверено временем и посетителями. Еще с 2006 годов понял, что счетики посещаемости на текстовых базах имеют свойства обнулятся. Такое часто было на wap сайтах, где юзался такой счетчик.
Парни, Вы чего??? Зачем использовать базу ради десятка записей? Тем более bdb или sqlite, которые не везде стоят?
2Тормоз: mysql – это легко ;)
Didgugan, бесплатно?! Ничего себе, очень заманчивое предложение! Раньше-то мне приходилось кругленькие суммы отстёгивать за каждое интервью. Есть счастье на земле, спасибо!
Аватар, проверено, но всё же не к месту база в Daos, я так думаю. Aktuba согласен :)
Тормоз, в тех рамках, что нужно для Daos, mysql элементарен как пять копеек.
А насчет избыточности – как посмотреть. По мне, так лучше пусть использует базу, но не глючит. К тому же это даст возможность к росту.
Альтернативный вариант – вынести работу с хранилищем в отдельное API и реализовать два варианта – для mysql и файлов. А каждый будет выбирать для себя, что ему нужнее.
Alek$, а ты быстро работаешь? Не хочешь заняться разработкой Daos 2.0 с премодерацией, настройкой оформления, языковыми файлами, разными биллингами,
блэкджеком и шлюхамивсякими охренительными задумками? Если тебе это интересно, пожалуйста, отпиши мылом, каковы твои условия.Время — деньги. Ничерта не успеваю.
При повторой проверки DAOS сглюкнул на втором сайта с 50 тыс. просмотрами в сутки.
Ждем мускул версию…
Тормоз, добавь плиз строчку.
<noscript>Для корректной работы требуется поддержка технологии JavaScript</noscript>.
Аватар, я же написал выше, что дело не в файлах, а в том, как я с ними работал. Работал неправильно. Сейчас переделываю, но пока всё поломал нафиг у себя в локалке :) Скоро исправлю. Дело в том, что для записи я блокировал файл, а для чтения нет, поэтому и сбросилось всё снова.
GogA, куда добавить-то? Там есть <noscript>.
Тоже хочу спросить, появится ли Daos на английском языке, и когда?
Появится. Когда не знаю, у меня всегда всё дольше, чем хотелось бы.
Ага, с буржуев реально денег скосить. Если ещё заручиться поддержкой ихнего авторитета… или продавать через такого…
Мне не нужна поддержка авторитетов. Вернее, я знаю, как легко и быстро приобрести её — уверен, что с раскруткой у меня не будет ни малейших проблем.
Всё таки решил под БД переписать?
Да, без MySQL никак. Выяснилось, что даже flock не спасает на действительно серьезных нагрузках.