Очень большие таблицы Mnesia в производстве

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

Для эффективной настройки фрагментированных таблиц мы использовали ряд ссылок, которые использовали мнезию в больших системах:
Это: Блог Mnesia One Year Later , Часть 2 блога , Читали даже здесь , О хешировании . Эти сообщения в блоге помогли нам настроить здесь и там лучшую производительность.

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

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

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

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

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

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

19
задан Muzaaya Joshua 17 August 2011 в 08:58
поделиться