kvs_stream.htm 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <meta name="description" content="" />
  8. <meta name="author" content="Maxim Sokhatsky" />
  9. <title>STREAM</title>
  10. <link rel="stylesheet" href="https://synrc.space/synrc.css" />
  11. </head>
  12. <body>
  13. <nav>
  14. <a href='https://n2o.dev'>DEV</a>
  15. <a href='https://kvs.n2o.space'>KVS</a>
  16. <a href='#' style="background:#ededed;">STREAM</a>
  17. </nav>
  18. <header>
  19. <a href="../../index.html"><img src="https://n2o.space/img/Synrc Neo.svg"></a>
  20. <h1>STREAM</h1>
  21. </header>
  22. <main>
  23. <section>
  24. <h3>ВСТУП</h3>
  25. <p>Модуль STREAM пропонує інтерфейс фолдів, акумуляторів за персистентного зберігання ланцюжків даних.
  26. </p>
  27. <p><blockquote><p><ul>
  28. <li><b><a href="#writer">writer/1</a></b> &mdash; створює та повертає курсор запису до бази даних.</li>
  29. <li><b><a href="#reader">reader/1</a></b> &mdash; створює та повертає курсор зчитування до бази даних.</li>
  30. <li><b><a href="#save">save/1</a></b> &mdash; зберігає курсор до бази даних.</li>
  31. <li><b><a href="#load">load_reader/1</a></b> &mdash; підзавантажує збережений курсор зчитування.</li>
  32. <li><b><a href="#load">load_writer/1</a></b> &mdash; підзавантажує збережений курсор запису.</li>
  33. <li><b><a href="#top">top/1</a></b> &mdash; повертає початок (вершину) ланцюжка.</li>
  34. <li><b><a href="#bot">bot/1</a></b> &mdash; повертає закінчення (основу) ланцюжка.</li>
  35. <li><b><a href="#next">next/1</a></b> &mdash; переміщає курсор зчитування на наступний елемент.</li>
  36. <li><b><a href="#prev">prev/1</a></b> &mdash; переміщає курсор зчитування на попередній елемент.</li>
  37. <li><b><a href="#take">take/1</a></b> &mdash; повертає N елементів з курсору зчитування.</li>
  38. <li><b><a href="#drop">drop/1</a></b> &mdash; пропускає N елементів з курсору зчитування.</li>
  39. <li><b><a href="#add">add/1</a></b> &mdash; додає елемент до списку.</li>
  40. <li><b><a href="#append">append/2</a></b> &mdash; додає елемент в канал.</li>
  41. <li><b><a href="#append">cut/2</a></b> &mdash; очищає канал до заданої мітки timestamp.</li>
  42. </ul></p></blockquote></p>
  43. <p>
  44. Ви може взяти <a style="margin-bottom:30px;"
  45. href="https://raw.githubusercontent.com/synrc/kvs/master/src/kvs_stream.erl">kvs_stream</a>
  46. і використовувати у своїх додатках без імпортування залежності <b>synrc/kvs</b>,
  47. оскільки даний модуль є самодостатнім.
  48. Додатками можуть бути: публічні та приватні канали/стрічки новин, FIFO черги,
  49. непрочитані повідомлення, чат, блокчейн etc.<br><br>
  50. </section>
  51. <section>
  52. <h3>WRITER</h3>
  53. <p>Курсор запису передставляє собою додавання деяких кешованих значень до списку-ланцюжка.
  54. Наприклад, розмір ланцюжка, перший елемент ланцюжка, кешоване значення
  55. попереднього записаного повідомлення, та поле для передачі аргументів stream функціям, таким, як add.</p>
  56. <figure><code>
  57. -record(writer, { id = [] :: term(),
  58. count = 0 :: integer(),
  59. cache = [] :: [] | tuple(),
  60. args = [] :: term(),
  61. first = [] :: [] | tuple() } ).
  62. </code></figure>
  63. <p>Щоб додати дані до бази даних, спочатку потрібно створити курсор запису,
  64. встановити запис з мета-інформацією в поле аргументів, та викликати функцію save.</p>
  65. <h4>writer(term()) -> #writer{}.</h4>
  66. <p>Створює курсор запису.</p>
  67. <h4>add(#writer{}) -> #writer{}.</h4>
  68. <p>Додає елемент до списку, на який вказує курсор запису.</p>
  69. <h4>load_writer(#writer{}) -> #writer{}.</h4>
  70. <p>Підзавантажує курсор запису.</p>
  71. <h4>save(#writer{}) -> #writer{}.</h4>
  72. <p>Переміщує курсор запису до бази даних.</p>
  73. </section>
  74. <section>
  75. <h3>READER</h3>
  76. <figure><figcaption>Курсор зчитування</figcaption><code>
  77. -record(reader, { id = [] :: integer(),
  78. pos = 0 :: [] | integer(),
  79. cache = [] :: [] | integer(),
  80. args = [] :: term(),
  81. feed = [] :: term(),
  82. dir = 0 :: 0 | 1 } ).
  83. </code></figure>
  84. <h4>reader(integer()) -> #reader{}.</h4>
  85. <p>Створює курсор зчитування.</p>
  86. <h4>load_reader(#reader{}) -> #reader{}.</h4>
  87. <p>Підзавантажує курсор зчитування з бази даних.</p>
  88. <h4>save(#reader{}) -> #reader{}.</h4>
  89. <p>Переміщує курсор зчитування до бази даних.</p>
  90. <h4>top(#reader{}) -> #reader{}.</h4>
  91. <p>Переміщає курсор в початок (вершину) списку.</p>
  92. <h4>bot(#reader{}) -> #reader{}.</h4>
  93. <p>Переміщає курсор в закінчення (основу) списку.</p>
  94. </section>
  95. <section>
  96. <h3>ITER</h3>
  97. <figure><figcaption>KVS Stream Iterator</figcaption><code>
  98. -record(iter, { id = [] :: [] | integer(),
  99. next = [] :: [] | integer(),
  100. prev = [] :: [] | integer() } ).
  101. </code></figure>
  102. <h4>next(#reader{}) -> #reader{}.</h4>
  103. <p>Переміщає курсор на наступний елемент. Споживає дані з вершини.
  104. Повертає помилку, якщо список є пустим, в іншому випадку — наступний чи останній елемент.</p>
  105. <h4>prev(#reader{}) -> #reader{}.</h4>
  106. <p>Переміщає курсор на попередній елемент. Споживає дані з основи.
  107. Повертає помилку, якщо список є пустим, в іншому випадку — наступний чи останній елемент.</p>
  108. <h4>drop(#reader{}) -> #reader{}.</h4>
  109. <p>Пропускає N елементів, розпочинаючи з курсора.</p>
  110. <h4>take(#reader{}) -> #reader{}.</h4>
  111. <p>Пробує споживати N записів зі stream, використовуючи його поточне значення та напрям.
  112. Повертає споживані дані. Зазвичай ви шукаєте певну позицію, і далі споживаєте деякі дані.</p>
  113. </section>
  114. <section>
  115. <p>Цей модуль може бути пов'язаним з:
  116. <a href="kvs.htm"><b>kvs</b></a>,
  117. <a href="kvs_st.htm"><b>kvs_st</b></a>.
  118. </p>
  119. </section>
  120. </main>
  121. <footer>
  122. 2005&mdash;2019 &copy; Synrc Research Center
  123. </footer>
  124. </body>
  125. </html>