Ответ 1
Вам не хватает нескольких важных моментов:
Прежде всего, у mnesia нет ограничения на 2 гигабайта. Он ограничен по 32-битной архитектуре, но вряд ли кто-либо уже присутствует для реальной работы. А на 64-битной вы не ограничены 2 гигабайтами. Я видел базы данных порядка нескольких сотен гигабайт. Единственная проблема - это начальное время запуска для них.
Mnesia построена для обработки:
- Очень низкий латентный поиск K/V, не обязательно линеаризуемый.
- Собственные транзакции с линеаризуемыми изменениями (C в теореме CAP). Им разрешено работать с гораздо более низкой задержкой, так как ожидается, что они будут относительно редкими.
- Изменение схемы он-лайн
- Выживание даже в случае сбоя узлов в кластере (где кластер невелик, скажем, не более 10-50 машин)
Дизайн таков, что вы избегаете отдельного процесса, поскольку данные уже находятся в системе Erlang. У вас есть QLC для запросов, связанных с каталогом. И у вас есть возможность хранить любой термин Erlang.
Mnesia очень хорошо справляется, если это то, что вам нужно. Его пределы:
- Вы не можете получить машину с объемом памяти более 2 терабайт. И загрузка 2 тераса с нуля будет медленной.
- Поскольку это система CP, а не система AP, потеря узлов требует ручного вмешательства. Возможно, вам также не нужны транзакции. Вы также можете захотеть легко добавлять в систему больше узлов и т.д. Для этого Riak - лучший выбор.
- Он использует оптимистичную блокировку, которая дает проблемы, если многие процессы пытаются получить доступ к одной и той же строке в транзакции.
Мой нормальный хот-трюк - начать с Mnesia в системах Erlang, а затем переключиться на другую систему по мере роста размера данных. Если размеры данных растут медленно, то вы можете хранить все в памяти в Mnesia и быстро вставать и работать.