Привычной SQL-транзакции в mongodb нет. Однако есть атомарные команды для изменения документа (одного!). Что позволяет реализовать двойную бух-запись.
Пример: есть коллекция организаций и журнал сумм на списание с организаций.
Получается такая реализация:
Вместо выполнения всей sql-транзакции - в коллекцию журнала добавляется запись о списании суммы с организации. Всё. Остальное - делает робот-скрипт (в этом примере - он работает строго в один поток!)
Что делает робот:
1. Находит не обработанную запись в коллекции журнала
2. В коллекции организаций у соответствующей организации за одну команду изменяется баланс и лог-поле (типа LogId + TimeStamp) Важно!: предварительно нужно проверить - не совпадает ли идентификатор журнальной записи с LogId. Если совпало - то значит скрипт запущен после сбоя, и уменьшать баланс не надо!
3. В коллекции журнала записи добавляется флаг "Обработана"=true
На 2 и 3 шаге нужно проверять getLastError(safe-mode) - если произошла ошибка - можно повторить шаг (только не бесконечно, а, например, 10 раз. если все плохо - то нужно как-то оповестить админа или программиста).
Это - очень упрощенный вариант. Только для понятия логики.
понедельник, 17 января 2011 г.
пятница, 14 января 2011 г.
MongoDB + Munin = графики
На сайте mongodb оказалась не работающая (для меня) инструкция. Покопав гугл нашел решение:
Плагины нужно скопировать в /usr/share/munin/plugins
и сделать симлинки по пути /etc/munin/plugins
потом проверить конфиг ноды:
перезапустить ноду:
Вот теперь на веб-странице графиков появилась группа mongodb.
P.S.: https://github.com/erh/mongo-munin/
Плагины нужно скопировать в /usr/share/munin/plugins
и сделать симлинки по пути /etc/munin/plugins
потом проверить конфиг ноды:
munin-node-configure ... mongo_btree | yes | mongo_conn | yes | mongo_lock | yes | mongo_mem | yes | mongo_ops | yes | ...
перезапустить ноду:
sudo /etc/init.d/munin-node restart
Вот теперь на веб-странице графиков появилась группа mongodb.
P.S.: https://github.com/erh/mongo-munin/
Подписаться на:
Сообщения (Atom)