kvs_stream.htm 7.5 KB

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