Почему крупные компании используют Mnesia вместо использования Riak или CouchDB

Я вижу две крупные компании, такие как Klarna и Whatsapp, которые используют Mnesia как свою базу данных памяти (не уверены, как они сохраняют данные с Mnesia с лимитом 2 ГБ). Мой вопрос: почему такие компании, а может быть и больше, я не знаю, использую Mnesia вместо Riak или couchDB, оба являются Erlang, где обе базы данных быстрее поддерживают базы данных баз данных, улучшают безболезненную настойчивость и намного больше функций. Я что-то пропустил здесь?

Ответы

Ответ 1

Вам не хватает нескольких важных моментов:

Прежде всего, у mnesia нет ограничения на 2 гигабайта. Он ограничен по 32-битной архитектуре, но вряд ли кто-либо уже присутствует для реальной работы. А на 64-битной вы не ограничены 2 гигабайтами. Я видел базы данных порядка нескольких сотен гигабайт. Единственная проблема - это начальное время запуска для них.

Mnesia построена для обработки:

  • Очень низкий латентный поиск K/V, не обязательно линеаризуемый.
  • Собственные транзакции с линеаризуемыми изменениями (C в теореме CAP). Им разрешено работать с гораздо более низкой задержкой, так как ожидается, что они будут относительно редкими.
  • Изменение схемы он-лайн
  • Выживание даже в случае сбоя узлов в кластере (где кластер невелик, скажем, не более 10-50 машин)

Дизайн таков, что вы избегаете отдельного процесса, поскольку данные уже находятся в системе Erlang. У вас есть QLC для запросов, связанных с каталогом. И у вас есть возможность хранить любой термин Erlang.

Mnesia очень хорошо справляется, если это то, что вам нужно. Его пределы:

  • Вы не можете получить машину с объемом памяти более 2 терабайт. И загрузка 2 тераса с нуля будет медленной.
  • Поскольку это система CP, а не система AP, потеря узлов требует ручного вмешательства. Возможно, вам также не нужны транзакции. Вы также можете захотеть легко добавлять в систему больше узлов и т.д. Для этого Riak - лучший выбор.
  • Он использует оптимистичную блокировку, которая дает проблемы, если многие процессы пытаются получить доступ к одной и той же строке в транзакции.

Мой нормальный хот-трюк - начать с Mnesia в системах Erlang, а затем переключиться на другую систему по мере роста размера данных. Если размеры данных растут медленно, то вы можете хранить все в памяти в Mnesia и быстро вставать и работать.

Ответ 2

очень внимательно. Нет фактических ограничений для размера таблицы дискового пространства mnesia.

  • Mnesia свободна в отличие от riak (для коммерческого использования).
  • Читайте о теореме о шапке. Вы можете создать свою собственную базу данных ca или cp или ap, используя обычную mnesia в качестве бэкэнд. Но если вы возьмете конкретный dbms, скажем, couchdb, он создан, чтобы быть ap из коробки. И вы не можете сделать это, скажем, ca (насколько я знаю)

Ответ 3

Насколько я могу судить, ни Riak, ни (см. примечание о BitCask в комментариях) CouchDB поддерживает базы данных в памяти. Я могу ошибаться в Riak, но я работаю над CouchDB, поэтому я очень уверен.

Инженеры выбирают mnesia над Riak или CouchDB, потому что решают другую проблему.

Являются ли они крупными компаниями, не являются фактором этого.