Как стать автором
Обновить

Комментарии 20

Чем Вас не устроила «своя» Эрланговская БД? Ипроизводительность высокая, и городушек не надо…
Всё-таки в Cache очень мощный инструмент работы с деревьями(глобалами), транзакциями, и много готового по организации распределённых хранилищ данных, при этом для разработчика эта распределённость скрыта. Настроить удалённую БД, мастер-слейв, теневое коприрование или зеркалирование — проще простого (об этом даже на хабре писали).
Помимо этого, на момент начала разработки, да и сейчас, иногда возникает необходимость подключиться к старым sql-источникам. Также данное ППО (MCA) — является частью более общего нашего ПО(ППО) ErlMOM (Erlang Message Oriented Middleware), которое позволяет осуществить интеграцию различных приложений и DBS в облачную инфраструктуру посредством обмена сообщениями в рамках конкурентной модели. Однако на практике, нами сейчас активно используется подключение к каше, в других наших проектах подключение к мнезии. Вообще, для обработки многомерных разряженных структур — использовать глобалы, которые по сути и сами есть многомерные разряженные структуры — очень удобно — и строить деревья или графы правил — получается естественно и просто. Также сам процесс создания системы и её частей — был достаточно растянут во времени, и для тех или иных компонент рассматривались, и прототипировались, различные варианты архитектуры, языки, библиотеки. СУБД Cache — нами была выбрана даже ранее, чем язык Erlang.
Никогда не понимал, чего такого многомерного в этих глобалах? Не видел, чтобы где-то реализация раскрывалась, но судя по поддерживаемым операциям — какая-то вариация на тему обычных btree. Термин чисто ради маркетинга?
btree у глобалов на физическом уровне. А так — это разреженный многомерный массив. Здесь неплохо объяснена природа глобалов.
По-моему куда более адекватно их природу описывает термин «вложенность», чем «многомерность». Когда я слышу про многомерность, приходят на ум скорее всякие spatial структуры данных.
Если вы о mnesia, у нее есть неприятная особенность — крайне долгое восстановление после сбоя, как и у dets, на котором у нее построено файловое хранилище. Mnesia рассчитана на эффективное хранение небольших объемов данных, не более того. Это не СУБД общего назначения.
используйте бездисковую схему и все будет ok.
А бездисковая схема внезапно позволит хранить большие объемы данных? :)) RAM'а всегда меньше, чем диска ;)
К сожалению, документация ерланга «как-бы избегает ответа на этот вопрос» по поводу достатка памяти, но намекает на использование бездисковых схем. Mnesia умеет, находясь в бездисковой ноде, подкачивать данные из дисковой ноды. Иными словами, при подъеме новой бездисковой ноды, как-бы в фоне произойдет подгрузка новых данных с дисковой ноды, если оная присутствует в схеме (вообще это уже неважно т.к. данные будут браться из любой доступной ноды). Не проверял в этом случае расход памяти. Где-то в мануалах по мнезии утверждается, что на 64-разрядной архитектуре вы можете задействовать «RAM-ноды» как результат с практически неограниченным объемом памяти. Это было кажется во «mnesia user manual» или каком-то faq/troubleshooting. Но во мнезии имеет смысл хранить указатели, сессионные данные, структуры, мелкие порции данных, словом классический key\value storage с плюшками. Но никак не хранилище для HD-video. Это не значит, что особо не впихнешь туда данных. Представьте себе рой из 3000 RAM-нод и объем данных, способный уместиться и живущий в этом количестве нод.
Есть и много других проблем.
1) При нескольких млн записях в секунду начинает резко падать скорость. Конечно можно разносить по машинам и балансировать нагрузка. Но количество машин ограничено.
2) Начинаются тормоза при двух млдр мелких записей в базе, даже когда скорость не сильно критична, такие тормоза раздражают.

Потому от mnesia мы отказались в пользу postgres. Гетерогенно и неудобно, но головной боли меньше.
Несколько млн записей в секунду это весьма приличная скорость. Мои поздравления!

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

Добиться максимальной отдачи от одной ноды это почти утопия (за исключением того, что он лучше других умеет работать с несколькими ЦПУ). Эрланг на то и эрланг, что дает средства для построения распределенных вычислений. Соответственно, существенно поднять вычислительную мощность можно за счет приемущественно горизонтального масштабирования через балансировщик-шедуллер.
Спасибо, старались.

как эрланг начинает захлебываться (вероятно сообщениями)

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

***

Горизонтально смаштабировать можно и без erlang, было бы на чем масштабировать. Как было сказано выше, мнезия только для мелких порций в малом количестве.

Пробывал redis и leveldb как альтернативу, но что-то с ними как-то не сложилось.
А постгрес типа может писать на одной машине несколько млн записей в секунду?
Ага, только немного подкрутить надо.
Писать. На диск. SQL база. Несколько миллионов записей в секунду.
Мы об одном и том же говорим?
Писать. На диск.
Я не уверен, что современные sql-базы настолько примитивны. Никто не отменял отложенных записей, никто не отменял балков (говорил, же, что, все таки, неудобно).
+ Если и на диск (в чем я крупно сомневаюсь), то смотря какой диск.

Если интересно, могу свести с человеком который непосредственно этим занимался.
А на persistence отдельное хранилище+синхронизация? Ад.
Почему, таки, Yaws? Он тяжел, и есть достаточное число http-аксепторов, библиотек и пр.
Туплы-мутуплы.
Есть хорошее слово в русском языке для перевода tuple — кортеж.
Фонетически сложнее произносить. Все время перед «ж» хочется «д» вставить.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий