ЖЖ от 2007-06-19 13:19:00

Даже не думайте связываться с QDBM на PHP. При одновременной записи в базу с блокировкой 'd' (т.е. блокируется файл базы) файл портится на посещаемом проекте за время от нескольких часов, до нескольких минут, с блокировкой 'l' и того хуже — lock может и не очиститься при выходе и процессы PHP начинают подвисать, ожидая снятия блокировки. При этом на одном сервере при попытке открыть битый файл падает PHP, на другом — PHP выдаёт ошибку драйвера qdbm.

Кстати, лимит базы QDBM почему-то 2GB, а не 4 (размер поля, где хранится размер базы — int, платформа у нас — 32 bit), понятно, что база не может быть отрицательного размера, так что ничего не мешает использовать uint, править руками не буду, если бы она работала стабильно, был бы смысл.

Конечно, можно было бы использовать QDBM в некоторых задачах как константную базу данных, но в этом смысле, если верить benchmarks, лучше взглянуть на CDB (от автора qmail!). Кстати, CDB в PHP удалось собрать только как bundled, сборка с библиотеками D. J. Bernstein или Михаила Токарева (TinyCDB) пораждает массу ошибок.

Что остаётся? Остальные файловые БД безнадёжно далеки от лидеров CDB и QDBM. Попробовать SQLite?

P.S. Засада — SQLite3 не хочет заносить символ с кодом ноль в BLOB-поле. Они издеваются? В модуле SQLite к PHP есть функция sqlite_udf_encode_binary для таких случаев — она кодирует специальным образом (вот изврат-то), преобразуя данные в безопасный для SQLite формат. Но модуль SQLite работает только с SQLite2. С SQLite3 в PHP принято работать через PDO, который имеет методы quote/bindValue и методы работы с LOB, которые плюют на кривожопие SQLite и оставляют NUL как есть.

Комментарии 41

indeyets № 1
offtopic

вот: http://blog.milkfarmsoft.com/?p=51
я наконец хоть что-то сделал в направлении FastCGI
exler № 7
(риторически и чтобы поддержать разговор) Блин, не и не негодяи они после этого?!!
dalexand № 20
У вас же большой опыт разработки программных проектов (http://tinyurl.com/377zu9).
exler № 22
Это теперь юмор такой — брать программы, написанные шестнадцать лет назад, и пытаться якобы «остроумно» попукивать по этому поводу? Ну-ну, юморите, юморите.
asan_13 № 21
Негодяи, зато этот текст в весьма легкой и непринужденной манере, что характерно!
phlint № 15
хм. так чем пользоваться тогда?
сейчас как раз стоит выбор, что использовать в качестве базы
bolk автор № 16
Смотря в качестве какой базы. У нас задача — хранить кеш. В файловой системе это делать нельзя — на EXT3 из-за хвостов расход места получается до 6-7 раз больше, чем размер, реально имеющийся в файлах (по показаниям du и du --apparent-size), кроме того, это тормозит безбожно, как не бейся, какие опции в EXT3 не включай. У QDBM всё хорошо, загрузка куда ниже, накладные расходы невелики (можно убедиться, почитав формат файла, он простой), но — база портится, зараза.

Поэтому, если задача схожая, то всё-таки SQLite. На таких запросах, которые нам нужны (SELECT/UPDATE с индексом) он делается MySQL/PostgreSQL/FireBird. По совмем простеньких тестах, кажется, видно, что QDBM пошустрее, но могу ошибаться — тщательно мы не тестировали, убедившись, что SQLite не сильно проигрывает QDBM, а больше нам ничего не нужно было.
bolk автор № 17
Да, немаловажно: в тестах мы отключали sync (поскольку для нас это некритично) запросом PRAGMA synchronous=OFF.
goziraga № 24
как хорошо шо я нач отдела а не программер гггггг :)
bolk автор № 25
Я техдиректор, это не значит, что я не должен быть в курсе всего, не понимать как всё работает, сидеть сложа ручки и ждать когда мне принесут оптимальное решение. Часть инноваций обязательно исходит от меня и я много уделяю внимание практике.
goziraga № 26
т.е. тебя настолько не уважают подчиненные что могут банально наебать в рабочем процессе и поэтому тебе приходится столько времени уделять вот тем буковкам вверху поста?
bolk автор № 27
Я настолько уверен в том, что у меня очень хороший мозг и я могу многое придумать лучше большинства. Есть такая фирма — Ашманов и партнёры (http://www.ashmanov.com/), очень уважаю их, кстати, Ашманов до сих пор занимается практикой, очень с ним согласен в этом вопросе.
goziraga № 28
bolk, т.е. ты настолько уверен что тебя могут наебать, что приходится даже самому себе доказывать что у тебя хороший мозг и ты круче большинства? :))
bolk автор № 29
goziraga, Никак не возму в толк причём здесь наёбка.
goziraga № 30
bolk, да при том что руководителю совсем не обязательно знать в тонкостях исполнение задачи, все технологии, нужно всего лишь обозначить рамки да приоритеты в задаче и все!

остальное сделают специалисты твоего коллектива, и ты можешь юзать свое время на организацию достижения более отдаленных целей

Более того, твоим же специалистам будет в напряг если ты будешь вмешиваться в их работу по мелочам. это ведь ИХ дело как в деталях реализовать проект а не ТВОЕ. Зачем мешать?

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

Именно это я и имел в виду в своем первом комменте.
bolk автор № 31
goziraga, почему, интересно, не моё? если у меня большой опыт и светлая голова, почем, интересно, я не должен вмешиваться в процесс?
bolk автор № 32
goziraga, вы какими-то странными категориями рассуждаете «должен/не должен», «обязательно/необазятально»
Аноним № 37
не пробовали Firebird Embedded ? www.iBase.ru

PS великолепен. просится в http://community.livejournal.com/emo_coders/ :-)
Аноним № 41
Предлагаю работу

Здравствуйте.

Предлагаю работу.
Место работы: удаленно (дома)
График работы: любой удобный для Вас
Оплата: wmz
Суть работы: Есть тексты для сайтов. Их нужно переписать своими словами, но чтобы сохранился смысл.
Главное качество. Т.е. если дать постороннему человеку прочитать начальный текст и тот который вы перепишите своими словами, чтобы он не понял что эти тексты написаны одинаково.
Теперь об оплате. Оплата 0,2 wmz за 1000 символов текста.

Всех кого заинтересовало мое предложение, прошу писать в асю: : 404-209-749

зы прошу модеров, перенести тему в соответствующий раздел, если я не там запостил.