Auto Increment with MongoDB
Популярная по своей дурости задача «а я не хочу эти длинные id, я хочу увеличивающиеся циферки в качестве айдишников».
Несмотря на свою нелепость, она иногда нужна. Например, человекочитаемые номера. «Хуйня номер 10».
Самый простой и рекомендуемый всеми способ — хранить где-то отдельно счетчик и менять его с помощью findandmodify (для чего в php нет отдельного метода, но можно через command).
Но можно сделать проще!
Если это хорошая, правильная таблица, из которой ничего не удаляется, то мы можем посчитать «номер записи» в таблице тупо зная тот факт, что нативные MongoId увеличиваются со временем и по ним можно сортировать не хуже, чем по какой-нибудь «дате создания».
Короче, как-то так:
$mongo -> insert ($U);
$inc = $mongo -> find (array ("_id" => array ('$lt' => $U[_id])));
$inc = $inc -> count ();
$inc++;
$mongo -> update (array ("_id" => new MongoId ($U[_id])), array ('$set' => array ("inc" => $inc)));
Ограничения очевидны, но часто «и так сойдет», да-да.
Файлы в базе
1. Легкий бэкап кучи файлов с помощью репликации базы.
2. Все равно нужна таблица с метаинформацией к файлам, тут все хранится «вместе».
R3
Вы, наверное, ждете, что я, как какой-нибудь Бирман, буду расписывать прелести нового движка? (Он называется, кстати, R3 — только потому, что предыдущий назывался R2).
Так вот, не буду.
В серверной части от тривиален. Нет, ну все же знают эту старую фишку, что разница эффективности программистов может достигать 20 раз, про это писали все, кому ни лень. Я не говорю, что я ровно в 20 раз эффективней остальных. Максимум в 19,95.
(Иными словами, я допускаю, что кому-то на что-то подобное потребуется 19 дней, но это не делает задачу нетривиальной).
Тем не менее, mongodb — документная база данных, прелести которой я уже расписывал. Очевидно, что комментарии к заметке хранятся прямо в документе «заметка», в комментариях хранятся «пользователи», про всякие мелочи, типа тэгов и поискового индекса я молчу.
И на все хватает одной «таблицы», которая называется «заметки». Удивительно!
Очевидно, что utf-8, потому что некуда деваться.
«Приводить примеры кода» просто бессмысленно, ну, скажем, выборка по тэгу делается «примерно так»:
$entries -> find (array ("tag" => "mongodb"));
Писать подобное глупо, потому что это просто обычный синтаксис выборки, — то же самое, что описывать SELECT в mysql, например.
Вся «серверная» часть занимает не больше дня (смотри про 19 дней выше), а делать блог без ояксов в наше время просто стыдно. Поэтому очевидно, что основные усилия пришлось приложить к html-ю, js и css — вещам, которые я совсем забыл/не знал. Тут тоже ничего такого нет, комментарии аяксом — тоже мне невидаль. Особенно если ты это умеешь (я не умею, но это не повод для гордости).
Прогресс не стоит на месте, сейчас даже девушка может собрать свой блогодвижок на каком-нибудь junko или boobie on trains за 15 минут, поэтому любой человек, который всерьез пишет о своем лучшем в мире движке блога сейчас (а не лет 10 назад), просто неадекватен.
Full Text Search in Mongo
Прочитал про Full Text Search в Mongo.
Это великолепно.
Нет, правда.