Daos держит нагрузки

28.10.2009

Выпускаю очередное обновление. Спасибо покупателям, которые провели испытания в боевых условиях: оказалось, что при 100 тыс. запросов в сутки с Daos происходили некоторые неприятные вещи… если быть точным, то просто сбрасывались все объявления. Извините, не ожидал такого поведения.

Дело в том, что запись данных происходила через file_put_contents без блокировки файла. Теперь, в новой версии файл данных блокируется до завершения записи. Надеюсь, должно замечательно работать при любых нагрузках. Тестируйте, пожалуйста, скачивайте новую версию.

P.S. Спасибо Edogs и Aktuba за ликбез.

P.P.S. Правки сделал уже в Vim! :)

Комментарии

  1. # Аватар: 

    Увы и ах не держит опять. Через ~ 1,5 часа снова база обнулилась чудестным образом

  2. # aktuba

    Перерыл инет – везде советуют делать через временный файл.

    P.S.: вынеси работу с файлом в одно место, чтобы не править несколько кусков кода.

  3. # aktuba

    http://spectator.ru/technology/php/flock_workaround

  4. # Jungle

    а sqlite чем не решение? для таких целей как раз

  5. # aktuba

    2Jungle: наверное тем, что не все хостинги поддерживают + нет необходимости в базе из-за одной записи ;)

  6. # Тормоз

    Аватар, ну вот, блин, радостное пробуждение :(
    Хвалёный flock всё же подвёл.

    Aktuba, спасибо за ссылку на спектатора. Сейчас позавтракаю и переделаю под переименование. Правда, всё равно что-то беспокоит меня в этом решении.

    Jungle, нужна максимальная независимость от платформ. Если уж использовать базу, то MySQL. Просто я считаю её слишком жирной для такого проекта. Хранить-то надо совсем немного.

  7. # Never Lex

    Видимо без мускуля не обойтись. Всё таки нагрузки – уязвимое место текстовой БД.

  8. # aktuba

    Проверь почту – там я тебе прислал ссылку на разъяснение по flock…

  9. # yaman

    > Правда, всё равно что-то беспокоит меня в этом решении
    ну да, если чтение будет произведено в тот момент, когда файл будет отсутствовать во время unlink или rename – это будет не айс
    надо чтение ф цыкл поставить тогда штоли :)

    второй момент – если файл будет залочен при чтении, и функцея записи попытается сделать те же unlink/rename – она обломаецо
    опять цыкл напрашиваетца

  10. # Тормоз

    Проблема ещё и в том, что настройки читаются как include(‘rewriteFile’), значит, есть вероятность чтения недозаписнного файла, на include блокировки не действуют. Возможно, придётся и чтение полностью переписывать и формат базы :(

  11. # aktuba

    2yaman: плохие идеи. очень плохие.

  12. # Jungle

    ну так, sqlite у многих по дефолту стоит и потом чем изобретать велосипед, лучше воспользоваться готовым решением, ИМХО

    или на крайняк использовать Berkeley DB или его аналоги http://ru2.php.net/manual/en/dba.requirements.php

    http://www.php.net/manual/en/function.dba-open.php

    не уж то блокировка файла в php не справляется?

  13. # Тормоз

    Jungle, просто блокировать файл при чтении тоже надо, см. выше. Я вчера сделал какое-то половинчатое решение, потому оно и не работает как надо.

  14. # Alek$

    Тормоз, в зависимости от mysql нет ничего критичного по одной простой причине: Daos имеет смысл ставиьт только на сайты с нормальной посещаемостью, которые в подавляющем большинстве случаев уже используют mysql. И даже если не используют, то хостер ее обязательно предоставляет.

  15. # Тормоз

    Alek$, сделаю признание: я до сих пор ни разу не работал с MySQL из скриптов :) Это пока останавливает.

    И вторая причина — немного сложнее для пользователя будет установка, ведь тогда надо указывать сервер базы, имя базы данных, логин/пароль. Муторно.

    Да и согласись, что смысла особого нет? Данных очень мало, не для MySQL эта задача.

  16. # didgugan

    Привет. Хочу взять у тебя интервью о твоем блоге. Напишу о нем пост. бесплатно.

  17. # Аватар: 

    Я за мускул. Проверено временем и посетителями. Еще с 2006 годов понял, что счетики посещаемости на текстовых базах имеют свойства обнулятся. Такое часто было на wap сайтах, где юзался такой счетчик.

  18. # aktuba

    Парни, Вы чего??? Зачем использовать базу ради десятка записей? Тем более bdb или sqlite, которые не везде стоят?

    2Тормоз: mysql – это легко ;)

  19. # Тормоз: 

    Didgugan, бесплатно?! Ничего себе, очень заманчивое предложение! Раньше-то мне приходилось кругленькие суммы отстёгивать за каждое интервью. Есть счастье на земле, спасибо!

    Аватар, проверено, но всё же не к месту база в Daos, я так думаю. Aktuba согласен :)

  20. # Alek$

    Тормоз, в тех рамках, что нужно для Daos, mysql элементарен как пять копеек.

    А насчет избыточности – как посмотреть. По мне, так лучше пусть использует базу, но не глючит. К тому же это даст возможность к росту.

    Альтернативный вариант – вынести работу с хранилищем в отдельное API и реализовать два варианта – для mysql и файлов. А каждый будет выбирать для себя, что ему нужнее.

  21. # Тормоз: 

    Alek$, а ты быстро работаешь? Не хочешь заняться разработкой Daos 2.0 с премодерацией, настройкой оформления, языковыми файлами, разными биллингами, блэкджеком и шлюхами всякими охренительными задумками? Если тебе это интересно, пожалуйста, отпиши мылом, каковы твои условия.

    Время — деньги. Ничерта не успеваю.

  22. # Аватар: 

    При повторой проверки DAOS сглюкнул на втором сайта с 50 тыс. просмотрами в сутки.

    Ждем мускул версию…

  23. # GogA

    Тормоз, добавь плиз строчку.

    <noscript>Для корректной работы требуется поддержка технологии JavaScript</noscript>.

  24. # Тормоз

    Аватар, я же написал выше, что дело не в файлах, а в том, как я с ними работал. Работал неправильно. Сейчас переделываю, но пока всё поломал нафиг у себя в локалке :) Скоро исправлю. Дело в том, что для записи я блокировал файл, а для чтения нет, поэтому и сбросилось всё снова.

    GogA, куда добавить-то? Там есть <noscript>.

  25. # vitvirtual

    Тоже хочу спросить, появится ли Daos на английском языке, и когда?

  26. # Тормоз

    Появится. Когда не знаю, у меня всегда всё дольше, чем хотелось бы.

  27. # Never Lex

    Ага, с буржуев реально денег скосить. Если ещё заручиться поддержкой ихнего авторитета… или продавать через такого…

  28. # Тормоз

    Мне не нужна поддержка авторитетов. Вернее, я знаю, как легко и быстро приобрести её — уверен, что с раскруткой у меня не будет ни малейших проблем.

  29. # Jungle

    Всё таки решил под БД переписать?

  30. # Тормоз

    Да, без MySQL никак. Выяснилось, что даже flock не спасает на действительно серьезных нагрузках.

Комментирование этой статьи закрыто.