Где находятся столики в Мнесии?

Я пытаюсь сравнить Mnesia с более традиционными базами данных.

Насколько я понимаю, таблицы в Mnesia могут быть расположены в (см. Потребление памяти в Mnesia ):

  • ram_copies - таблицы хранятся в ets, поэтому нет долговечности, как в ACID.
  • disc_copies - таблицы расположены в ets и dets, поэтому размер таблицы не может превышать доступную память? А если таблица фрагментирована, база данных не может быть больше доступной памяти?
  • disc_only_copies - таблицы расположены dets, поэтому нет кеширования в памяти и хуже производительность. И размер таблицы ограничен размером dets, иначе таблица должна быть фрагментирована.

Поэтому, если мне нужна производительность чтения из ОЗУ и долговечность записи на диск, тогда размер таблиц очень ограничен по сравнению с традиционными СУБД, такими как MySQL или PostgreSQL.

Я знаю, что Mnesia не предназначена для замены традиционных СУБД, но может ли она использоваться в качестве большой СУБД или мне нужно искать другую базу данных?

Я буду использовать VPS с ограниченным объемом памяти, около 512 МБ, но мне нужна хорошая производительность базы данных.

Является ли disc_copies и другие типы столов в Mnesia настолько ограниченными, как я понял? Разве база данных не может быть частично в памяти, а полная копия на диске?


person Jonas    schedule 07.04.2010    source источник


Ответы (1)


Емкость хранилища базы данных Mnesia для различных типов таблиц обсуждалась в предыдущем вопросе SO:

Какова емкость хранилища базы данных Mnesia?

где уже есть отличный ответ.

Очевидно (но я думаю, вы это уже видели) официальный документ доступен по адресу:

http://www.erlang.org/doc/man/mnesia.html

Также, прочитав FAQ по Mnesia:

11.5 Сколько данных можно хранить в Mnesia?

Dets использует 32-битные целые числа для смещения файлов, поэтому максимально возможная таблица мнезии (на данный момент) составляет 4 Гб.

На практике ваша машина замедлится до ползания, прежде чем вы достигнете этого предела.

Наконец, таблицы Mnesia можно фрагментировать. Это обсуждается здесь и там.

Это мои 2р.

person Roberto Aloi    schedule 08.04.2010
comment
Спасибо! Насколько я понимаю, в моем случае таблицы будут ограничены размером менее 512 МБ, если у меня нет disc_only, что дает плохую производительность. Так что лучше тогда поискать другую базу данных. Так как у меня всего 512 МБ ОЗУ. - person Jonas; 08.04.2010
comment
По сути, вам нужно кеширование, и нет, насколько я знаю, Mnesia не делает этого за вас. Реализовать его, очевидно, можно, но его там нет и ждет :) - person Roberto Aloi; 08.04.2010