diff options
author | Björn Gustavsson <[email protected]> | 2018-10-04 10:30:05 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2018-11-06 10:01:23 +0100 |
commit | 805748eb668d5562fe17f3172cdae07a86166c3f (patch) | |
tree | 8f1081edbd3f002dc7171a59f47d5b201097e47b /scripts | |
parent | 7d92a5c7be185e549bdd8ad56524d2bd3f9479a6 (diff) | |
download | otp-805748eb668d5562fe17f3172cdae07a86166c3f.tar.gz otp-805748eb668d5562fe17f3172cdae07a86166c3f.tar.bz2 otp-805748eb668d5562fe17f3172cdae07a86166c3f.zip |
Add a persistent term storage
Persistent terms are useful for storing Erlang terms that are never
or infrequently updated. They have the following advantages:
* Constant time access. A persistent term is not copied when it is
looked up. The constant factor is lower than for ETS, and no locks
are taken when looking up a term.
* Persistent terms are not copied in garbage collections.
* There is only ever one copy of a persistent term (until it is
deleted). That makes them useful for storing configuration data
that needs to be easily accessible by all processes.
Persistent terms have the following drawbacks:
* Updates are expensive. The hash table holding the keys for the
persistent terms are updated whenever a persistent term is added,
updated or deleted.
* Updating or deleting a persistent term triggers a "global GC", which
will schedule a heap scan of all processes to search the heap of all
processes for the deleted term. If a process still holds a reference
to the deleted term, the process will be garbage collected and the
term copied to the heap of the process. This global GC can make the
system less responsive for some time.
Three BIFs (implemented in C in the emulator) is the entire
interface to the persistent term functionality:
* put(Key, Value) to store a persistent term.
* get(Key) to look up a persistent term.
* erase(Key) to delete a persistent term.
There are also two additional BIFs to obtain information about
persistent terms:
* info() to return a map with information about persistent terms.
* get() to return a list of a {Key,Value} tuples for all persistent
terms. (The values are not copied.)
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions