DETS table auto_save behaviour

Frank Muller frank.muller.erl@REDACTED
Tue May 25 09:01:11 CEST 2021


This question always puzzled me.
Does Mnesia rely on the same assumptions?

/Frank

<khaelin@REDACTED> a écrit :

>
> Hi,
>
> I am unsure about the behaviour of DETS regarding saving.
>
> The documentation indicates:
>
>     all operations performed by Dets are disk operations
>
> Which seems to hint that every single insertion ends up on disk. Good.
>
> But then:
>
>     {auto_save, auto_save()} - The autosave interval. If the interval is
>     an integer Time, the table is flushed to disk whenever it is not
>     accessed for Time milliseconds. A table that has been flushed
>     requires no reparation when reopened after an uncontrolled emulator
>     halt.
>
> This is ambiguous: does it means that entries will be buffered in memory
> and only written to disk during the auto save operation (therefore some
> operations are not actually disk operations), or does it mean that DETS
> always writes to disk without sync-ing (using fsync or equivalent), and
> synchronization occurs during the auto save operation ?
>
> In any case, am I correct in assuming that DETS does not offer any way
> to guarantee that entries are actually written on disk, meaning that an
> application crash would lead to a loss of every entry written since the
> last auto_save operation ?
>
> I was hoping to use DETS as a local persistent buffer in case data
> cannot be written to a remote database, but it seems impossible to
> guarantee that every entry is being sync-ed to disk.
>
> Thank you in advance.
>
> Regards,
>
> --
> Nicolas Martyanoff
> http://snowsyn.net
> khaelin@REDACTED
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20210525/a8bc9a2c/attachment.htm>


More information about the erlang-questions mailing list