Какова емкость базы данных Mnesia?
в некоторых местах состояние 2GB период. Некоторые места утверждают, что это зависит от количества узлов.
3 ответов
довольно большой, если ваш вопрос: "какова емкость базы данных mnesia, состоящей из огромного количества disc_only_copies
таблицы" - вы в значительной степени ограничены доступным дисковым пространством.
более простой вопрос для ответа-это максимальная емкость одной таблицы mnesia разных типов. ram_copies
таблицы ограничены доступной памятью. disc_copies
таблицы ограничены их dets
бэкэнд (Хакан Матсон на Mnesia) - этот предел составляет 4 Гб данных на момент.
таким образом, простой ответ так прост disc_copies
таблица может хранить до 4 Гб данных, прежде чем они столкнуться с проблемами. (Mnesia на самом деле не сбой, если вы превысите ограничение на размер диска-часть ram_copies таблицы продолжает работать, поэтому вы можете восстановить это, удалив данные или сделав другие договоренности во время выполнения)
однако, если вы рассматриваете другие функции mnesia, то ответ больше сложный.
-
local_content
таблицы. Если таблица alocal_content
таблица, тогда он может иметь различное содержимое на каждом узле кластера mnesia, так емкость таблицы4Gb * <number of nodes>
-
фрагментированные таблицы. Mnesia поддерживает настраиваемые пользователем таблицы секционирования или sharding с помощью фрагментов таблицы. В этом случае можно эффективно распространять и распространять данные в таблице по нескольким примитивным таблицам. Эти примитивные таблицы могут иметь свою собственную конфигурацию-скажем, одна таблица ram_copies, а остальные таблицы disc_only_copies. Эти примитивные таблицы имеют те же ограничения размера, что и ранее, и теперь эффективная емкость фрагментированной таблицы
4Gb * <number of fragments>
. (к сожалению, если вы фрагментируете свою таблицу, вам придется изменить код доступа к таблице для использованияmnesia:activity/4
вместоmnesia:write
и друзья, но если вы планируете это заранее, это управляемо) - внешний копии!--15--> Если вам нравится жить на крайнем крае, вы можете использовать mnesiaex патчи для mnesia и хранить данные таблицы во внешней системе, такой как Amazon S3 или Токио Шкаф. В этом случае емкость таблицы ограничена внутренним хранилищем.
этот ответ противоречит двум существующим ответов, когда дело доходит до таблиц типа disc_copies
. Позвольте мне сначала сделать несколько общих замечаний:--12-->
- таблица mnesia типа
ram_copies
ограничивается только доступной оперативной памятью (за исключением 32-разрядной машины). Данные хранятся в таблице ETS. - таблица mnesia типа
disc_only_copies
хранится в таблице Dets. Таблицы Dets ограничены 2 ГБ из-за ограничений в формате файла. - в очевидный способ обойти этот предел-создать больше таблиц, возможно, через таблица фрагментации.
- схема также хранится в таблице Dets, поэтому информация, описывающая все существующие таблицы, также ограничена 2 ГБ. Однако вы, скорее всего, столкнетесь с другими ограничениями, прежде чем попадете в этот.
- таблица mnesia типа
disc_copies
хранятся и в ОЗУ и на диске, поэтому он ограничен доступной ОЗУ. Я постараюсь показать ниже что есть нет конкретные ограничения, введенные Mnesia.
disc_copies переместились из dets в disk_log в 2001
принято считать, что disc_copies
таблицы поддерживаются таблицами Dets. Насколько я могу судить, так было до Erlang/OTP R7B-4 (выпущен 30 сентября 2001 года). От README:
-- mnesia -----------------------------------------------------------------
OTP-3712 - Speed/load improvements disc_copies tables are not
implemented with dets anymore.
посмотреть разница для более подробной информации, в частности mnesia_lib.erl
и mnesia_loader.erl
.
источники, поддерживающие dets и ограничение 2 / 4 ГБ
ответ Архелая рисует от http://erlang.org / ~hakan/mnesia_consumption.txt, что объясняет это disc_copies
таблицы находятся в таблицах ets и dets. Однако, глядя на индекс в каталоге, мы видим, что этот документ датирован 1999:
[TXT] mnesia_consumption.txt 26-Oct-1999 10:57 10k
имеет смысл, что он сказал бы это, как было написано два года назад изменение.
Рэй Boosen это!--20--> черпает из Эрланг FAQ:
11.5, сколько данных может храниться в Mnesia?
Dets использует 32-битные целые числа для смещений файлов, поэтому самая большая возможная таблица mnesia (на данный момент) - 4Gb.
на практике ваша машина замедлится до обхода, прежде чем вы достигнете этого предела.
FAQ говорит, что, по крайней мере, с января 2001 года (см. самая ранняя копия в Wayback Machine). Это означает, что эта запись FAQ датируется до перехода на disk_log и не обновлялась в течение длительного времени. (Во всяком случае, ограничение размера таблицы Dets составляет 2 ГБ, а не 4 ГБ.) Я подал запрос на вытягивание для FAQ.
источники, поддерживающие более высокие пределы
узнать вам некоторые Эрланг глава о Мнезии говорит:
ram_copies
Эта опция делает так, что все данные хранятся исключительно в ETS, поэтому только память. Память должна быть ограничена теоретическим 4GB (и практически вокруг 3GB) для виртуальных машин, скомпилированных на 32 битах, но этот предел отодвигается дальше на 64 битных виртуальных машинах, предполагая, что доступно более 4GB памяти.disc_only_copies
Этот параметр означает, что данные хранятся только в детс. Только диск, и как таковое хранение ограничено пределом 2GB DETS.disc_copies
Этот параметр означает, что данные хранятся как в ETS, так и на диске, поэтому как память, так и жесткий диск. таблицы disc_copies не ограничены пределами DETS, так как Mnesia использует сложную систему журналов транзакций и контрольных точек, которые позволяют создать дисковую резервную копию таблицы в памяти.
Я не уверен, когда это было написано, но текст выше существует в самая ранняя копия машины Wayback от апреля 2012 года.
на сообщение на erlang-вопросы под названием " избиение mnesia до смерти (было RE: использование 4GB ОЗУ с Erlang VM)", датированный 7 ноября 2005 года, Ульф Вигер пишет:
на машине 16 ГБ вы можете:
выполнить 6 миллионов одновременных процессов (через использование erlang: hibernate, я был на самом деле возможность работать 20 млн - икру время: 6.3 us, сообщение проходя время: 5.3 нас, и я имел 1,8 ГБ в запасе.)
заполнить mnesia, по крайней мере 12 ГБ данных, но подумайте, как вы хотите представить его, так как 64-битный размер слова немного взрывает вещи.
держите таблицу 10 GB+ disc_copy в mnesia. Этот время загрузки и стоимость дампа журнала кажутся приемлемыми (10 минут для загрузки, сброс занимает некоторое время, но работает в фоновом режиме совершенно мило.)
выводы
путаница, похоже, проистекает из недостающей или устаревшей информации из официальных источников:
- в документации Mnesia не упоминается никаких ограничений размера таблицы
- в FAQ Erlang говорится, что Mnesia подлежит ограничению размера 4 GB Dets, но этот ответ был написан до изменения dets в disk_log
- единственный другой документ на erlang.org домен является Håkan Документ маттссона, датируемый до изменения dets в disk_log
LYSE кажется первым "авторитетным" источником, который упоминает disc_copies
таблицы не подпадают под ограничение размера таблицы Dets.