В конце концов, хорошим решением может быть увеличение количества фрагментов и меньшее количество записей на фрагмент, но в то же время попытка найти золотую середину и не потерять преимущества некоторых повышений производительности жесткого диска, таких как буферы и кэши.

пользуем Mnesia в качестве основной базы данных для очень большой системы. Фрагментированные таблицы Mnesia вели себя так хорошо в течение периода тестирования. Система имеет около 15 таблиц, каждая из которых реплицирована на 2 сайта (узла), и каждая таблица сильно фрагментирована. Во время фазы тестирования (которая была сосредоточена на тестах доступности, эффективности и нагрузки), мы приняли Mnesia с ее многочисленными преимуществами сложных структур, которые будут полезны для нас, учитывая, что все наши приложения, работающие поверх службы, являются приложениями Erlang / OTP. Мы используем Yaws 1.91 в качестве основного WebServer.

Для эффективной настройки Fragmented Tables мы использовали ряд ссылок, которые использовали mnesia в больших системах:
Это:Mnesia Год спустя Блог, Часть 2 блога, Следил за этим даже здесь, О хешировании, Эти посты в блоге помогли нам отрегулировать кое-что для лучшей производительности.

Теперь проблема. Mnesia имеет ограничения по размеру таблицы, да, мы согласны. Однако ограничения на количество фрагментов нигде не упоминались. По соображениям производительности и для того, чтобы обслуживать большие данные, о том, сколько фрагментов сохранит мнезию в порядке?

В некоторых наших таблицах у нас есть 64 фрагмента. с участиемn_disc_only_copies установите количество узлов в кластере, чтобы каждый узел имел копию для каждого фрагмента. Это помогло нам решить проблемы с ошибкой записи mnesia, если данный узел недоступен в одно мгновение. Также в блоге выше, он предполагает, чтоthe number of fragments should be a power of 2, это утверждение (он говорит) было исследовано по тому, как Mnesia хеширует записи. Нам, однако, нужно больше пояснений по этому вопросу, и о какой степени двух здесь идет речь: 2,4,16,32,64,128, ...?

Система предназначена для работы на HP Proliant G6 и содержит процессоры Intel (2 процессора, каждые 4 ядра, частота 2,4 ГГц на каждое ядро, размер кэша 8 МБ), объем ОЗУ 20 ГБ, дисковое пространство 1,5 ТБ. Теперь 2 из этих мощных машин находятся в нашем распоряжении. Системная база данных должна быть реплицирована через два. Каждый сервер работает под управлением Solaris 10, 64 бит.

При каком количестве фрагментов производительность Mnesia может ухудшиться? Это нормально, если мы увеличим количество фрагментов с 64 до 128 для данной таблицы? как насчет 65536 фрагментов (2 ^ 16)? Как мы масштабируем нашу мнезию, чтобы использовать пространство в терабайтах с помощью фрагментации?

Пожалуйста, предоставьте ответы на вопросы, и вы можете дать совет по любым другим параметрам, которые могут улучшить Систему.

ПРИМЕЧАНИЕ. Все таблицы, содержащие миллионы записей, создаются вdisc_only_copies типа, так что проблем с оперативкой нет. ОЗУ будет достаточно для нескольких таблиц ОЗУ, которые мы запускаем. Другие СУБД, такие как MySQL Cluster и CouchDB, также будут содержать данные и используют то же оборудование с нашей СУБД Mnesia. MySQL Cluster реплицируется на два сервера (каждый из которых содержит два узла NDB, сервер MySQL), причем узел управления находится на другом хосте.

Ответы на вопрос(1)

Ваш ответ на вопрос