Как таблица Mnesia disk_copies сохраняется в оперативной памяти при запуске приложения?

У меня есть таблица A типа disk_copies. На диске два файла.

  1. A.DCD - время последнего изменения 30 августа
  2. A.DCL - сегодня (7 сентября)

Насколько я понимаю, A.DCL - это файл журнала, а A.DCD содержит все данные. Сегодня я выполнил несколько операций над A, однако A.DCD остался прежним, но размер A.DCL был увеличен. Когда мое приложение запускается, эта таблица сохраняется в оперативной памяти, когда файл DCD не изменяется. Надлежащая документация недоступна, поэтому может ли кто-нибудь сказать, каков точный процесс? Также файл DCD со временем становится очень большим, хотя в таблице нет данных, может ли кто-нибудь уточнить?


person akagrawal    schedule 07.09.2020    source источник


Ответы (1)


Для таблицы disk_copies данные считываются в таблицу ETS при запуске Mnesia, поэтому вся таблица находится в оперативной памяти. DCD — это последний полный моментальный снимок, а файл DCL содержит изменения, внесенные после моментального снимка, поэтому сначала загружается DCD, а затем применяются записи DCL. Когда вы выполняете операции с таблицей, записи добавляются в DCL. Когда DCL становится достаточно большим, Mnesia создает новый полный дамп DCD и очищает DCL.

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

person RichardC    schedule 07.09.2020