LINUX.ORG.RU

История изменений

Исправление gh0stwizard, (текущая версия) :

1. Что именно из ACID не соблюдается, для каких веб-сайтов это не важно, а для каких ACID нужен?

ACI поддерживается на уровне 1 документа в 1 коллекции. В монге нет транзакций, поэтому случай для SQL транзакция-insert-update-delete-стоп в монге невозможен. В ее случае это будет три разных операции, если в момент между insert-update-delete произойдет чтение данных другим процессом, то он увидет, скажем свежий insert, но не увидет update и delete. Эту проблему решили ребята в форке TokuMX, там есть поддержка транзакций.

2. Как жить без джоинов?

Костыли на внутреннем JS. Не следил давно за MongoDB, но в 2.4 это было далеко-далеко от понятия PL/SQL. Т.е. что-то можно делать. На выходе получаем процедуру, которая делает map-reduce (возможно, в из нескольких запросов подряд в разные места) и отдает документы в нужном формате.

3. Почему MongoDB лучше скейлится?

By design. В частности мастер-мастер, реплики, арбитер все сделано из коробки. Минус в том, что эти процессы, как и отсутсвие транзакций приводят к одному и тому же побочному эффекту: все происходит асинхронно и поэтому приложение должно «понимать», когда что-то не так (например, insert в другую коллекцию только производится и надо подождать/отклонить запрос/т.п.

Исходная версия gh0stwizard, :

1. Что именно из ACID не соблюдается, для каких веб-сайтов это не важно, а для каких ACID нужен?

ACID поддерживается на уровне 1 документа в 1 коллекции. В монге нет транзакций, поэтому случай для SQL транзакция-insert-update-delete-стоп в монге невозможен. В ее случае это будет три разных операции, если в момент между insert-update-delete произойдет чтение данных другим процессом, то он увидет, скажем свежий insert, но не увидет update и delete. Эту проблему решили ребята в форке TokuMX, там есть поддержка транзакций.

2. Как жить без джоинов?

Костыли на внутреннем JS. Не следил давно за MongoDB, но в 2.4 это было далеко-далеко от понятия PL/SQL. Т.е. что-то можно делать. На выходе получаем процедуру, которая делает map-reduce и отдает документы в нужном формате.

3. Почему MongoDB лучше скейлится?

By design. В частно MM, реплики, арбитер все сделано из коробки. Минус в том, что эти процессы, как и отсутсвие транзакций приводят к одному и тому же побочному эффекту: все происходит асинхронно и поэтому приложение должно «понимать», когда что-то не так (например, insert в другую коллекцию только производится и надо подождать/отклонить запрос/т.п.