UniPg
Compatibility layer for pg and pg2.
Why?
pg was introduced at OTP 23, and pg2 is deprecated and will be removed at OTP 24.
| OTP version | 22 | 23 | 24 |
|---|---|---|---|
| pg | X | O | O |
| pg2 | O | O | X |
This means that you shouldn't directly depend on pg or pg2 if you wish your code to work with wide range of OTP versions.
Features
1. Unified API on top of pg and pg2.
UniPg provides API similar to pg and implemented on top of
pgfor OTP >= 23.pg2for OTP < 23.
2. scope emulation for pg2
scope is new concept introduced by pg, so it is emulated for pg2.
3. Implicit scope and group creation.
:pg.start_link(scope)is called before scope access.:pg2.create(group)is called before group access.
Calling scope/group creation everytime introduces performance penalty. But it's so small(< 5μs on my MBP 2015) that most applications can ignore it for the sake of convenience.
Usage
iex(1)> UniPg.join(:scope1, :group1, [self()])
:ok
iex(2)> UniPg.get_members(:scope1, :group1)
[#PID<0.179.0>]
iex(3)> UniPg.which_groups(:scope1)
[:group1]
iex(4)> UniPg.leave(:scope1, :group1, [self()])
:ok
iex(5)> UniPg.get_members(:scope1, :group1)
[]Installation
If available in Hex, the package can be installed
by adding uni_pg to your list of dependencies in mix.exs:
def deps do
[
{:uni_pg, "~> 0.2.1"}
]
end