Я вижу две крупные компании, такие как Klarna и Whatsapp, которые используют Mnesia как свою базу данных памяти (не уверены, как они сохраняют данные с Mnesia с лимитом 2 ГБ). Мой вопрос: почему такие компании, а может быть и больше, я не знаю, использую Mnesia вместо Riak или couchDB, оба являются Erlang, где обе базы данных быстрее поддерживают базы данных баз данных, улучшают безболезненную настойчивость и намного больше функций. Я что-то пропустил здесь?
Почему крупные компании используют Mnesia вместо использования Riak или CouchDB
Ответ 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, "ограничение на 2 ГБ для дисковых таблиц" является общим заблуждением. Прочитать эту запись Какова емкость хранилища базы данных Mnesia?
очень внимательно. Нет фактических ограничений для размера таблицы дискового пространства mnesia.
- Mnesia свободна в отличие от riak (для коммерческого использования).
- Читайте о теореме о шапке. Вы можете создать свою собственную базу данных ca или cp или ap, используя обычную mnesia в качестве бэкэнд. Но если вы возьмете конкретный dbms, скажем, couchdb, он создан, чтобы быть ap из коробки. И вы не можете сделать это, скажем, ca (насколько я знаю)
Ответ 3
Насколько я могу судить, ни Riak, ни (см. примечание о BitCask в комментариях) CouchDB поддерживает базы данных в памяти. Я могу ошибаться в Riak, но я работаю над CouchDB, поэтому я очень уверен.
Инженеры выбирают mnesia над Riak или CouchDB, потому что решают другую проблему.
Являются ли они крупными компаниями, не являются фактором этого.