STREAM

ВСТУП

Модуль STREAM пропонує інтерфейс фолдів, акумуляторів за персистентного зберігання ланцюжків даних.

  • writer/1 — створює та повертає курсор запису до бази даних.
  • reader/1 — створює та повертає курсор зчитування до бази даних.
  • save/1 — зберігає курсор до бази даних.
  • load_reader/1 — підзавантажує збережений курсор зчитування.
  • load_writer/1 — підзавантажує збережений курсор запису.
  • top/1 — повертає початок (вершину) ланцюжка.
  • bot/1 — повертає закінчення (основу) ланцюжка.
  • next/1 — переміщає курсор зчитування на наступний елемент.
  • prev/1 — переміщає курсор зчитування на попередній елемент.
  • take/1 — повертає N елементів з курсору зчитування.
  • drop/1 — пропускає N елементів з курсору зчитування.
  • add/1 — додає елемент до списку.
  • append/2 — додає елемент в канал.
  • cut/2 — очищає канал до заданої мітки timestamp.

Ви може взяти kvs_stream і використовувати у своїх додатках без імпортування залежності synrc/kvs, оскільки даний модуль є самодостатнім. Додатками можуть бути: публічні та приватні канали/стрічки новин, FIFO черги, непрочитані повідомлення, чат, блокчейн etc.

WRITER

Курсор запису передставляє собою додавання деяких кешованих значень до списку-ланцюжка. Наприклад, розмір ланцюжка, перший елемент ланцюжка, кешоване значення попереднього записаного повідомлення, та поле для передачі аргументів stream функціям, таким, як add.

-record(writer, { id = [] :: term(), count = 0 :: integer(), cache = [] :: [] | tuple(), args = [] :: term(), first = [] :: [] | tuple() } ).

Щоб додати дані до бази даних, спочатку потрібно створити курсор запису, встановити запис з мета-інформацією в поле аргументів, та викликати функцію save.

writer(term()) -> #writer{}.

Створює курсор запису.

add(#writer{}) -> #writer{}.

Додає елемент до списку, на який вказує курсор запису.

load_writer(#writer{}) -> #writer{}.

Підзавантажує курсор запису.

save(#writer{}) -> #writer{}.

Переміщує курсор запису до бази даних.

READER

Курсор зчитування
-record(reader, { id = [] :: integer(), pos = 0 :: [] | integer(), cache = [] :: [] | integer(), args = [] :: term(), feed = [] :: term(), dir = 0 :: 0 | 1 } ).

reader(integer()) -> #reader{}.

Створює курсор зчитування.

load_reader(#reader{}) -> #reader{}.

Підзавантажує курсор зчитування з бази даних.

save(#reader{}) -> #reader{}.

Переміщує курсор зчитування до бази даних.

top(#reader{}) -> #reader{}.

Переміщає курсор в початок (вершину) списку.

bot(#reader{}) -> #reader{}.

Переміщає курсор в закінчення (основу) списку.

ITER

KVS Stream Iterator
-record(iter, { id = [] :: [] | integer(), next = [] :: [] | integer(), prev = [] :: [] | integer() } ).

next(#reader{}) -> #reader{}.

Переміщає курсор на наступний елемент. Споживає дані з вершини. Повертає помилку, якщо список є пустим, в іншому випадку — наступний чи останній елемент.

prev(#reader{}) -> #reader{}.

Переміщає курсор на попередній елемент. Споживає дані з основи. Повертає помилку, якщо список є пустим, в іншому випадку — наступний чи останній елемент.

drop(#reader{}) -> #reader{}.

Пропускає N елементів, розпочинаючи з курсора.

take(#reader{}) -> #reader{}.

Пробує споживати N записів зі stream, використовуючи його поточне значення та напрям. Повертає споживані дані. Зазвичай ви шукаєте певну позицію, і далі споживаєте деякі дані.

Цей модуль може бути пов'язаним з: kvs, kvs_st.