Будет ли dets выполнять чтение с диска при поиске с параметром ram_file?
Опция ram_file
описано в документации на DETS Erlang
open_file(name, args)
{ram_file, boolean()}
- Будет ли таблица храниться в ОЗУ. Хранение таблицы в ОЗУ может показаться аномалией, но может повысить производительность приложений, которые открывают таблицу, вставляют набор объектов и затем закрывают таблицу. Когда таблица закрывается, ее содержимое записывается в файл на диске. По умолчаниюfalse
.
это выполнит сохранение на диске после вставки или обновления
Что, если я воспользуюсь открытием, затем поиском и закрытием?
1 ответ
Я не проверял документы, но предполагаю, что это означает, что виртуальная машина откроет файл и, возможно,mmap
это, поэтому он постоянно хранится в памяти и будет синхронизироваться с файлом на диске, но я думаю, что изменение все еще может закончиться в кеше, поэтому его нельзя сразу записать на диск. Если вы хотите быть уверены, что все изменения были сброшены на диск, используйте dets:sync/1
вызвать таблицу, чтобы принудительно сбросить данные, что явно указано в документации:
Это также относится к таблицам, которые были открыты с флагом
ram_file
установлен вtrue
. В этом случае содержимое файла RAM сбрасывается на диск.
Он не будет открывать и закрывать файл после каждого поиска, но будет держать его открытым до тех пор, пока dets:close/1
не будет вызываться по данной таблице. С другой стороны, открытие и закрытие таблицы для каждого поиска может быть дорогостоящим, поэтому использование DETS будет немного бессмысленным.