dominicletz

dominicletz

Creator of Elixir Desktop

DetsPlus - Pure Elixir replacement for `:dets` without the size limitation

Hey there,

for a side project I needed to store more than those max. 2gb that the builtin :dets supports and so I created this new pure Elixir library DetsPlus.

It has mostly the same API but is a more Elixir friendly as it supports the Enum protocol and structs/maps!. So you can do Enum.reduce() and friends on it.

When storing maps/structs we have to specify as kepos the field name instead of the element index for tuples. E.g. here an example storing maps with DetsPlus:

{:ok, dets} = DetsPlus.open_file(:example, keypos: :id)
DetsPlus.insert(dets, %{id: 1, value: 42})
[{%id: 1, value: 42}] = DetsPlus.lookup(dets, 1)
# or using the Enum protocol:
[{%id: 1, value: 42}] = Enum.to_list(dets)
:ok =  DetsPlus.close(dets)

It’s using a constant database approach inspired by D.J. Bernsteins CDB library https://cr.yp.to/cdb.html - and so key lookups are extremely efficient even though it’s going to disk. Also when updating the database the whole file is being replaced atomically making DetsPlus great for embedded and Nerves use cases where power might be gone at any time.

Docs: DetsPlus — DetsPlus v2.1.1
Github: GitHub - dominicletz/dets_plus: Pure Elixir disk backed key-value store.

Add it to your deps and let me know any feedback!

def deps do
  [
    {:dets_plus, "~> 2.1"}
  ]
end

Most Liked

richgal

richgal

Hi @dominicletz ,

Thanks for sharing this module, I immediatly started using it :slight_smile:

I ran into one issue. When I call the DetsPlus.close function a PagedFile process stays alive in hibernated mode and spawn a new process every time I call DetsPlus.open_file or DetsPlus.lookup.

Am I missing something and this the normal working of this module?

I made a github issue also, to help with follow up.

dominicletz

dominicletz

Creator of Elixir Desktop

Thanks @richgal that’s fixed!

richgal

richgal

Happy to hear, I’ll try out soon. I’m planning to use DetsPlus in a production app.

Where Next?

Popular in Libraries Top

kip
Image is an image processing library for Elixir. It is based upon the fabulous vix library that provides a libvips wrapper for Elixir. I...
574 16576 179
New
sabiwara
Dune is a sandbox for Elixir and aims to safely evaluate user-provided code. You can try it out using this basic Elixir playground made ...
New
Crowdhailer
The latest release of Ace (0.10.0) includes serving content over HTTP/2. I have started writing a webserver to teach my self more about...
New
markmark206
simple_feature_flags is a tiny package that lets you turn features on or off based on which environment (e.g. localhost, staging, product...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35421 110
New
tfwright
After working on it for a couple of months and using it in production for most of that time, today I’ve released LiveAdmin, a LiveView ba...
New
Qqwy
Solution is a library to help you with working with ok/error-tuples in case and with-expressions by exposing special matching macros, as ...
New
alisinabh
Hey everyone i’ve developed a library for Jalaali calendar for elixir which supports converting Gregorian dates to Jalaali and vice vers...
New
tmbb
PhoenixWS - Websockets over Phoenix Channels Source code on Github here: https://github.com/tmbb/phoenix_ws Phoenix channels are a great...
New
mplatts
With HEEX released we decided to start a components library using Tailwind CSS - check it out here: Petal Components. We also have a boi...
New

Other popular topics Top

senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
lk-geimfari
What is most correct way to open, read and parse JSON file with poison? For example if we have example.json file in root of some projec...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New

Sub Categories:

We're in Beta

About us Mission Statement