Каковы преимущества Mnesia над основными реализациями баз данных SQL и чем они отличаются?
Могу ли я использовать базу данных для хранения действительно огромных объемов данных без заметного снижения производительности?
feature-comparison
Ясир Арсанукаев
источник
источник
Ответы:
Извините за опоздание на вечеринку. :) Вот мой ответ, основанный на использовании Mnesia с 1996 года и различных других технологий баз данных с 1988 года.
Mnesia и MySQL действительно разные звери, и какой из них лучший, во многом зависит от того, как вы собираетесь его использовать.
Если ваше приложение написано на Erlang, Mnesia позволяет вам хранить данные в том же пространстве памяти, что и ваше приложение, что означает, что вы можете извлечь один объект данных за несколько микросекунд. Это невозможно в MySQL, так как ваше приложение и база данных будут разделены в памяти. Причина, по которой Mnesia может сделать это и при этом быть надежной, заключается в том, что Erlang реализует «защиту» памяти на уровне языка.
В целом, базы данных SQL, как правило, предпочитают пропускную способность по сравнению с задержкой, а когда дело доходит до задержки, Mnesia + Erlang, как правило, выдающиеся. Вам нужно решить, какой из них наиболее важен для вас. Как сказано в документации (выше), целевыми приложениями Mnesia были приложения для телекоммуникационной коммутации, где требования к времени отклика, например, для настройки вызова, составляли около 20 мс. По сути, это означало, что вы могли читать из базы данных только в том случае, если данные находились в разделяемой памяти, но избегали записи в постоянное хранилище для каждой настройки вызова. OTOH, эти приложения практически не нуждаются в специальной поддержке запросов и не используют очень большие наборы данных. Была проделана определенная работа по расширению пригодности Mnesia для других доменов, но это не является приоритетом для команды разработчиков Erlang / OTP. Mnesia - это то, что есть, и, скорее всего, так и останется.
В приведенной выше ссылке, где Mnesia и MySQL сравниваются по скорости, нужно помнить, что он находится в eJabberd, который работает на одном сервере, если это MySQL, и запускает полностью реплицированную базу данных, если это Mnesia - и большие кластеры eJabberd могут иметь до 10 или более эрланговых узлов (и, следовательно, 10 или более реплик Mnesia). С точки зрения избыточности это довольно смешно и дорого, и Mnesia ни в коем случае не заставляет вас делать это. Это, очевидно, дает быстрое чтение на каждом узле, но запись будет очень дорогой. Несколько сравнений, которые я прочитал, закончились сравнением распределенной Mnesia с MySQL с одним узлом; если избыточность не требуется для MySQL, она не должна требоваться и для Mnesia. Mnesia достаточно гибка, позволяя выбирать шаблоны репликации, а расположение данных прозрачно для приложения.
Mnesia также не ограничивается 2 ГБ на таблицу (хотя есть особый вариант хранения ). Самая большая из известных мне баз данных Mnesia имеет около 600 ГБ данных в (64-битной) ОЗУ + диск - хотя я этого не рекомендую. Что-нибудь до 10-20 ГБ должно быть прекрасно с современным оборудованием, но пропустите disc_only_copies полностью и используйте disc_copies - покупайте больше RAM, если вам нужно. Я бы дважды подумал, прежде чем использовать поддержку шардинга (mnesia_frag) - она работает, но редко стоит того.
Возможно, самое большое различие между Mnesia и MySQL - это сам SQL: Mnesia на самом деле не обладает сопоставимой функциональностью; QLC предлагает некоторую поддержку специальных запросов, но он не находится в той же лиге, что и SQL, и не является уровнем оптимизации запросов. В области инструментов и обеспечения MySQL также превосходит другие, и, если вам нужна аналитика, нет сомнений, какой из них вы должны выбрать (т.е. НЕ Mnesia).
Лучший способ увидеть Mnesia - это расширение языка эрланг. Он предоставляет данные прямо у вас под рукой и отлично подходит для небольших наборов данных, где структура данных и шаблоны доступа хорошо известны. С этой целью использование MySQL примерно так же неудобно, как использование Mnesia для вещей, где MySQL работает лучше всего.
Большинство приложений находятся где-то посередине, и это становится вызовом для суждения. Вы можете в конечном итоге использовать оба ...
источник
Из документации :
Mnesia против MySQL, производительность :
CouchDB против Mnesia, V. MySQL и другие темы Mnesia :
Короче говоря, он разработан для очень конкретной цели и, кажется, хорошо спроектирован для этой цели. Ни одна база данных не может быть абстрактно сравнена с другой. Только с использованием требований могут быть созданы элементы соизмеримости.
источник
Нет, я бы не сказал, что Mnesia хороша для большого количества данных. Вы можете использовать Ets или Dets в качестве бэкэнда. Если вы выберете Ets, ваша база данных будет только в оперативной памяти и будет очень быстрой, но данные не будут постоянными. И если вы хотите, чтобы ваши данные были постоянными (сохранялись на диске), вам нужно использовать Dets, который имеет ограничение 2 ГБ , поэтому ваша база данных не может содержать более 2 ГБ данных.
Вы можете использовать пользовательский бэкэнд, например, innostore, который используется в базе данных Riak NoSQL.
Преимущества Mnesia в том, что это распределенная база данных, поэтому очень легко создавать отказоустойчивые системы, если у вас более одного компьютера. И это очень легко использовать в Erlang, так как это языковая база данных и действует как функция. И это также очень быстро, если вам нужна только база данных в памяти, например, как кеш.
источник