Разница в согласованности MongoDB и HBase? Сделки?

Я неоднократно слышал, что такие компании, как сильная согласованность HBase. Я читал про HBase, и он мне нравится. Затем я подумал о mongodb write и о разнице между ними. После поиска MongoDB, похоже, также имеет сильную согласованность. Но согласованно ли это? Похоже, у HBase есть транзакции, а у MongoDB - нет. Я немного запутался. Все, что я нашел, - это простые вставки и обновления для них обоих, а также объяснение того, как они воспроизводятся. Я не видел транзакций.

В чем разница согласованности MongoDB и HBase? Я считаю, что HBase имеет транзакции ACID, есть ли у mongodb что-нибудь для работы с несколькими вставками или ожидается, что все должно быть в одном документе? (Я не могу придумать причину, по которой этого банкомата недостаточно).

По причинам согласованности и репликации, в чем разница и почему один может выбрать одно вместо другого?


person Community    schedule 10.10.2012    source источник
comment
на этой странице hbase.apache.org/acid-semantics.html прямо говорится, что HBase НЕ имеют ACID (но некоторые свойства ACID, которые вы можете сказать для MongoDB). Возможно, вы можете конкретно описать, какие свойства ACID критичны для вашего приложения, и это упростит конкретный ответ на вопрос.   -  person Asya Kamsky    schedule 30.10.2012


Ответы (3)


Могу ответить только за MongoDB.

MongoDB не имеет транзакций на стороне сервера. Это не означает, что ожидается, что все вставки будут одним документом, потому что многоуровневое вложение документов на 3 или 5 уровней может стать проблемой. Более того, в настоящее время он просто не поддерживается, и сообщество, использующее MongoDB, лично решило проголосовать и поддержать различные функции.

При этом MongoDB может выполнять транзакции на стороне клиента: http://docs.mongodb.org/manual/tutorial/perform-two-phase-commit/, однако, поскольку он не изолирован от самого сервера базы данных, он по-прежнему открыт для определенных сценариев сбоя, которые могут повлиять на его способность создавать целостную транзакцию.

При этом, если бы вы написали своего рода демона, который бы управлял вашими транзакционными запросами в кластере, я не вижу причин, по которым он был бы менее надежным, чем то, что может предложить HBase.

Я не могу говорить о согласованности HBase, поскольку я лично фактически не использовал HBase в производственной среде, однако MongoDB имеет все нормальные уровни согласованности чтения и записи для отдельных запросов, которые вы ожидаете от HBase и SQL, что позволяет обеспечить безопасный уровень вставки, который действительно может реплицироваться на другие узлы кластера до того, как ваше приложение получит успешный обратный вызов для операции. Фактически, настройка MongoDB по умолчанию не является согласованной, однако вы можете сделать это как таковой.

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

person Sammaye    schedule 25.10.2012
comment
Означает ли «транзакции на стороне клиента» реализовать это самостоятельно? Я прочитал ссылку, и похоже, что вам нужно реализовать это самостоятельно, и это выглядит очень грубо: x. Я не уверен, что вы говорите, что можете вставить сразу несколько документов (я думаю, атомарно)? - person ; 25.10.2012
comment
@ acidzombie24 Действительно, это немного грубо, и да, это есть в вашем коде приложения, поэтому вы не можете атомарно вставлять несколько документов. Это, конечно, изменяет динамику блокировки, которая также может происходить, поскольку вместо атомарной блокировки, как для кислотной транзакции, вы вместо этого использовали бы блокировку записи уровня БД (v2.2) для вставок и атомарную блокировку для обновлений. Не говоря уже о том, что для отслеживания обновлений требуется отдельная таблица / коллекция, которая снова управляется из кода приложения, а не из БД. - person Sammaye; 25.10.2012

Могу ответить за сторону hbase. Сначала вы можете иметь транзакцию только в hbase для каждой строки. у вас есть 2 вида атомарных операций.

  1. Проверить и поставить.

  2. Атомный счетчик

Если вам нужна возможность писать транзакцию для нескольких строк. Я могу порекомендовать вам 2 открытых источника: 1. https://github.com/VCNC/haeinsa. этот открытый исходный код, на мой взгляд, лучшее, что я нашел на данный момент. он использует check & put и выполняет своего рода двухфазную фиксацию строк.

  1. https://github.com/caskdata/tephra. Этот открытый исходный код объединяет клиент-сервер и сопроцессор. и, на мой взгляд, это может быть не масштабирование, поскольку сервер является узким местом.

также 2 фазы фиксации. и я думаю, что для очень быстрых транзакций это может быть быстрее, чем haeinsa.

person Ehud Lev    schedule 23.07.2015

Начиная с версии 4.0 (выйдет летом 2018 г.) MongoDB будет поддерживать многодокументные транзакции ACID. Зарегистрируйтесь в бета-программе на странице https://www.mongodb.com/transactions.

person Tiramisu    schedule 22.02.2018