Почему крупные компании используют Mnesia вместо использования Riak или CouchDB [закрыто]
Я вижу, что 2 большие компании, такие как Klarna и Whatsapp, используют Mnesia в качестве базы данных в памяти (не знаю, как они сохраняют данные с Mnesia с лимитом 2 ГБ). Мой вопрос: почему компании, подобные этим, и, возможно, больше я не знаю, используют Mnesia вместо Riak или couchDB, оба являются Erlang, где обе базы данных поддерживают более быстрые базы данных памяти, лучшую безболезненную настойчивость и гораздо больше функций. Я что-то пропустил?
3 ответов
вы упускаете ряд важных моментов:
во-первых, mnesia не имеет ограничения в 2 гигабайта. Он ограничен 32-битной архитектурой, но вряд ли кто-то из них присутствует для реальной работы. И на 64bit, вы не ограничены 2 ГБ. Я видел базы данных порядка нескольких сотен гигабайт. Единственная проблема-это начальное время запуска для них.
Mnesia построен для обработки:
- очень низкая латентность k/v lookup, не обязательно линеаризуемый.
- соответствующие операции с изменением linearizible (C в теоремы Cap). Им разрешено работать с гораздо худшей задержкой, поскольку они, как ожидается, будут относительно редкими.
- on-line изменение схемы
- выживание, даже если узлы терпят неудачу в кластере (где кластер мал, скажем, 10-50 машин максимум)
конструкция такова, что вы избегаете отдельного процесса, так как данные уже находятся в системе Erlang. У вас есть QLC для datalog-like запросы. И у вас есть возможность хранить любой термин Erlang.
Mnesia хорошо себя чувствует, если это то, что вам нужно. Его пределы:
- вы не можете получить машину с более 2 терабайт памяти. И загрузка 2 teras с нуля будет медленной.
- поскольку это система CP, а не система AP, потеря узлов требует ручного вмешательства. Вам также могут не понадобиться транзакции. Возможно, вы также захотите легко добавить больше узлов в система и так далее. Для этого РИАК-лучший выбор.
- он использует оптимистическую блокировку, которая дает проблемы, если многие процессы пытаются получить доступ к одной строке в транзакции.
мой обычный goto-трюк состоит в том, чтобы начать с Mnesia в Erlang-системах, а затем переключиться на другую систему по мере увеличения размера данных. Если размеры данных растут медленно, то вы можете сохранить все в памяти в Мнезии и встать и работать очень быстро.
- что касается постоянной емкости памяти для mnesia, "ограничение 2 ГБ для дисковых таблиц" является распространенным заблуждением. Прочитайте этот пост какова емкость хранилища базы данных Mnesia?
очень внимательно. Фактические ограничения для размера таблицы дисков mnesia отсутствуют.
- Мнезия свободна в отличие от riak (для коммерческого использования).
- читайте о теореме cap. Вы можете создать свою собственную базу данных ca или cp или ap, используя простую mnesia в качестве базовая программа. Но если вы берете конкретную СУБД, скажем couchdb, она предназначена для ap из коробки. И вы не можете сделать это, скажем, ca (насколько я знаю)
насколько я могу судить, ни РИАК, ни (см. Примечание о BitCask в комментариях) CouchDB поддерживает базы данных в памяти. Я могу ошибаться на Riak, но я работаю на CouchDB, поэтому я очень уверен.
инженеры выбирают mnesia над Riak или CouchDB, потому что это решает другую проблему.
являются ли они крупными компаниями, не имеет значения.