KVS — це бібліотека абстракції на KV сховищами (з єдиним простором ключів),
що складається з двох частин: базового API та API управління ітераторами: take, drop, next, prev, append.
Основне API в модулі kvs, а ітераторів в kvs_stream.
Призначення KVS
— Надання інтерфейсу абстрагування широкого спектру сховищ;
— Надання зручного Ерланг REPL інтерфейсу для роботи з рекордами;
— Поділ на базовий (get put delete) та розширений інтерфейс ітераторів (next prev);
— Набір драйверів (внутрішня база, зовнішня база і файлова система);
— Шари даних: файлова система, ланцюжки повідомлень, банківські транзакції, дерева підписів, трейси бізнес-процесів, блокчейни, системи черг, часові послідовності.
Бібліотека KVS дозволяє або повинна дозволяти зберігати та витягувати будь-якого виду
структури надаючи семантику управління курсорами next prev,
якою володіють дерева. Тому можна сказати, що це інтерфейс
оператора до ланцюжкових та деревоподібних сховищ. У своїй
основі KVS підтримує три механізми зберігання ланцюжків:
1) перший спосіб, двозв'язні списки, явний, де next і prev покажчики безпосередньо присутні в даних, підходить навіть для управління деревами;
2) другий, явний, де є тільки next, цей спосіб підходить для списків, багато людей запитують про цей спосіб, але ми його не використовували ніколи та імплементації під рукою немає;
3) і третій, явний спосіб, де записи вбудовуються у існуючий індекс, тобто. btree таблиці, zero-overhead.
В якомусь сенсі перший і другий способи реалізують певний шар поверх KVS,
так як kvs_stream працює з будь-якими сторожами поліморфно, а ось kvs_st
драйвер ітераторів зроблено спеціально для rocksdb.