11defmodule B4 do
22 alias B4 . { DatabaseSupervisor , DatabasesSupervisor , Keydir , KeydirOwner , Writer }
33
4+ @ doc """
5+ Create a database in `directory` with the given options.
6+
7+ Options:
8+ - `target_file_size`: when the size of the current write file reaches this size,
9+ the system will attempt to close it and start a fresh one.
10+ Defaults to `2 ** 31` bytes (2 GiB).
11+ """
412 def new ( directory , options \\ [ target_file_size: 2 ** 31 ] ) do
513 case DatabasesSupervisor . start_database ( directory , options ) do
614 { :ok , _pid } -> :ok
715 other -> other
816 end
917 end
1018
19+ @ doc """
20+ Insert `value` for `key`.
21+
22+ Old versions are preserved on disk until you call `merge/2`,
23+ at which point all non-live data on disk is destroyed.
24+ """
1125 def insert ( directory , key , value ) do
1226 Writer . insert_sync ( directory , key , value )
1327 end
1428
29+ @ doc """
30+ Like `Map.fetch/2`.
31+
32+ Get `value` for `key`, returning `{:ok, value}`, `:not_found`, or `{:error, error}`.
33+ """
1534 def fetch ( directory , key ) do
1635 tid = KeydirOwner . get_keydir_tid ( directory )
1736
@@ -42,16 +61,28 @@ defmodule B4 do
4261 end
4362 end
4463
64+ @ doc """
65+ Delete the given key from the dataset.
66+ The key and its previous inserts still exist on disk
67+ until you call `merge/2`.
68+ """
4569 def delete ( directory , key ) do
4670 Writer . delete_sync ( directory , key )
4771 end
4872
73+ @ doc """
74+ All live keys in the database.
75+ """
4976 def keys ( directory ) do
5077 tid = KeydirOwner . get_keydir_tid ( directory )
5178 Keydir . keys ( tid )
5279 end
5380
54- def merge ( directory , timeout \\ 5_000 ) do
81+ @ doc """
82+ Rewrite the current set of "read" files into a new set
83+ that contains only live keys.
84+ """
85+ def merge ( directory , timeout \\ 15_000 ) do
5586 with { _ , :ok } <- { :set_merge_in_progress , Writer . set_merge_in_progress ( directory , true ) } ,
5687 { _ , :ok } <- { :merge_action , KeydirOwner . merge ( directory , timeout ) } ,
5788 { _ , :ok } <- { :unset_merge_in_process , Writer . set_merge_in_progress ( directory , false ) } do
@@ -63,6 +94,9 @@ defmodule B4 do
6394 end
6495 end
6596
97+ @ doc """
98+ Shut down the supervision tree for the given database.
99+ """
66100 def close ( directory ) do
67101 DatabaseSupervisor . stop ( directory )
68102 end
0 commit comments