Re: persistent_term to replace ETS for caching
Bob Ippolito <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CACwMPm9DyVP9tTMyXZBQG4yWiNvRHHzYXN=AO8Td+xnhD8a2ZQ@mail.gmail.com> |
I’m not familiar with the implementation details but my understanding from the docs is that erase/1 and put/2 (only when updating an existing term) cause a global GC. What processes do with those terms is only relevant in that if they have references to multi-word persistent terms that are being updated or erased then the global GC pause will take longer. On Sun, Dec 6, 2020 at 06:29 Richard O'Keefe <[email protected]> wrote: > Thanks for that advice about persistent_term. > From the documentation, > <quote> > When a persistent term is updated or deleted, a global garbage collection > pass is run to scan all processes for the deleted term, and to copy it into > each process that still uses it. > </quote> > Do I understand correctly that if three processes refer > to a persistent-term, and one of them deletes it, it > will be copied into both of the other processes, thus > INCREASING the amount of memory used? > This is sufficiently counter-intuitive that I am not > sure I would dare to use this feature. > > Do I further understand correctly that *adding* a new > persistent-term does NOT force garbage collection? > > > On Mon, 7 Dec 2020 at 00:49, Nalin Ranjan <[email protected]> wrote: > >> It has the potential to trigger Global GC, and can affect responsiveness >> as per the docs. >> >> https://erlang.org/doc/man/persistent_term.html >> >> Regards >> Nalin Ranjan >> >> On Sun, Dec 6, 2020 at 5:16 AM Frank Muller <[email protected]> >> wrote: >> >>> Hi guys, >>> >>> At work, we cache about 5.3 million entries in ETS. The system works >>> perfectly, no issue so far (many years). >>> >>> During a brainstorming session, a colleague suggested to switch to >>> persistent_term instead to avoid ETS term copying. >>> >>> Pretty simple: we check if the Key exists in persistent_term. If yes, we >>> are done. If not, we get it from ETS, move it to persistent_term and send >>> it back to the caller. >>> >>> Question: is there any limitation(s) on persistent_term usage? Stated >>> otherwise, can we create 5.3 million persistent_term <K,V>? >>> >>> Any suggestion/idea/thought is very welcome. >>> >>> /Frank >>> >>