diamond

A read-only in-memory key/value storage optimized for the fastest possible read times


Keywords
elixir, in-memory-database
License
Artistic-1.0-cl8

Documentation

Diamond

Hex Version License Documentation

Diamond is a read-only in-memory key/value storage optimized for the fastest possible read times.

Installation

Add :diamond to your list of dependencies in mix.exs:

defp deps do
  [
    {:diamond, "~> 0.1"}
  ]
end

Usage

data = %{foo: "bar", baz: "bong"}
:ok = Diamond.initialize(data)

"bar" = Diamond.get(:foo)

Benchmarks (Read Times)

Small (1,000 keys)

Diamond           - 81_918_000 / sec  
:persistent_term  - 45_045_000 / sec  (1.8x slower)  
:ets (async)      -  9_176_000 / sec  (8x slower)  
GenServer (Map)   -    946_000 / sec  (86x slower)  
:ets (serialized) -    823_000 / sec  (99x slower)  

Medium (10,000 keys)

Diamond           - 72_992_000 / sec  
:persistent_term  - 39_354_000 / sec  (1.8x slower)  
:ets (async)      -  8_693_000 / sec  (8x slower)  
GenServer (Map)   -    928_000 / sec  (78x slower)  
:ets (serialized) -    823_000 / sec  (88x slower)  

Large (100,000 keys)

Diamond           - 57_844_000 / sec  
:persistent_term  - 34_447_000 / sec  (1.6x slower)  
:ets (async)      -  8_591_000 / sec  (6x slower)  
GenServer (Map)   -    922_000 / sec  (62x slower)  
:ets (serialized) -    821_000 / sec  (70x slower)  

Benchmarks (Initialization Times)

The time to initialize the data into memory grows linearly with the size of your dataset.

Data Initialization Times

Therefore, take care when initializing large datasets (especially 100,000+ keys).

Notes on Benchmarks

Datasets consist of a map for each key, where each map contains 12 sub-keys with string values, and each string contains ~26 alphanumeric characters.

Benchmarks were run on a 2021 Macbook Pro, using the benchee library.

License

Copyright (C) 2024 Andrew P Berrien

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.