В основном читайте только использование DETS
Вопрос
Поэтому я использовал ETS - отлично работает. Тем не менее, я использую его как кэш данных маршрута, которые я загружаю при загрузке модуля, и сохраняю при изменении (оно читается гораздо больше, чем написано).
Я думал, что Dets сделает вещи намного чище - мне не нужно беспокоиться о управлении настойчивостью стола. Будет ли это хорошо использовать DETS? (Размер не проблема, в основном связанный с значительным повышением производительности чтения - все данные могут легко вписаться в память).
Решение
DETS намного медленнее, чем ETS в большинстве случаев, но я думаю, что если размер ваших данных мал, то большинство, если он будет кэширован дисковым кешем и будет быстрее извлекать второй раз, когда вы его читаете, так что лучшее - это Попробуйте это с вашим типом использования
Но задумались ли вы использовать Mnesia вместо ETS напрямую? С типом таблицы Mnesia Disc_copies вы получите скорость ETS и все еще настойчивости
Другие советы
Прямо из Dets Man Page:
«Поскольку все операции, выполняемые DETS, являются дисковыми операциями, важно понимать, что одна операция поиска включает в себя серию операций на дисковом поиске и чтении. По этой причине функции DETS намного медленнее, чем соответствующие функции ETS, хотя и функции, хотя и функции, хотя DETS экспортирует аналогичный интерфейс ».
То есть для хранения в чтении, DETS не является оптимальным выбором.
(Я должен признать, что я нахожу это дизайнерским решением странным - лучшая реализация должна кэшировать недавние поиски. Однако, поскольку эти ETS и DETS являются основными средствами в Эрланге, я думаю, что реализации оставили эту оптимизацию для пользователей.)
Для написания редко прочитайте много данных, которые вы в порядке, держите в памяти, проверьте «мохиглобал». У MochiWeb есть аккуратный модуль, который злоупотребляет общей кучей Erlang для констант модулей через систему управления кодом, чтобы обеспечить сверхбыстрый доступ к терминам, генерируя модули с заданными значениями в качестве константов на лету.
Riak использует мохиглобаль для состояния кольца, IIRC.
Ее источник:
https://github.com/mochi/mochiweb/blob/master/src/mochiglobal.erl
Конечно, здесь нет абсолютно никакой настойчивости, но если вы хотите сильно оптимизировать чтения, вы не можете стать намного лучше, чем это.