kvs.htm 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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>KVS</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://kvx.n2o.space'>KVS</a>
  16. <a href='#' style="background:#ededed;">KVS</a>
  17. </nav>
  18. <header>
  19. <a href="../../index.html"><img src="https://n2o.space/img/Synrc Neo.svg"></a>
  20. <h1>KVS</h1>
  21. </header>
  22. <main>
  23. <section>
  24. <h3>ВСТУП</h3>
  25. <p>Модуль KVS надає інтерфейс користувача для команд консолі.
  26. Він має функції відкриття, маніпулювання даними та відновлення даних.
  27. Під капотом він обробляє налаштовувані під час виконання бекенди для кожної підтримуваної бази даних.</p>
  28. <p><blockquote><p><ul>
  29. <li><b><a href="#dir">dir/0</a></b> &mdash; повертає перелік таблиць.</li>
  30. <li><b><a href="#ver">ver/0</a></b> &mdash; повертає версію KVS.</li>
  31. <li><b><a href="#seq">seq/2</a></b> &mdash; генерує новий ідентифікатор послідовностей таблиці.</li>
  32. <li><b><a href="#count">count/1</a></b> &mdash; повертає кількість записів в таблиці.</li>
  33. <li><b><a href="#put">put/1</a></b> &mdash; зберігає запис, використовуючи id як ключ.</li>
  34. <li><b><a href="#get">get/2</a></b> &mdash; повертає запис по його ключу.</li>
  35. <li><b><a href="#delete">delete/1</a></b> &mdash; видаляє запис з таблиці.</li>
  36. <li><b><a href="#index">index/3</a></b> &mdash; виконує пошук записів по назві поля та його значенню.</li>
  37. </ul></p></blockquote></p>
  38. <p>Ви можете поміняти бекенд, використовуючи змінні оточення env в налаштуваннях додатку.
  39. Це добре працює навіть під великим навантаженням.</p>
  40. </section>
  41. <section>
  42. <h3>ВСТАНОВЛЕННЯ</h3>
  43. <p>В sys.config ви вказуєте kvx бекенд та список модулів, які містять експорт
  44. функції <b>metainfo/0</b>.</p>
  45. <figure><code>
  46. [{kvx, [{dba,store_mnesia},
  47. {schema,[kvx,kvx_stream]}]}].
  48. </code></figure>
  49. <h4>dir() -> list({'table',atom()}).</h4>
  50. <p>Повертає актуальні таблиці.</p>
  51. <h4>ver() -> {'version',string()}.</h4>
  52. <p>Повертає версію бекенда.</p>
  53. <h4>dump() -> ok.</h4>
  54. <p>Повертає інформацію про базу даних.</p>
  55. <figure><code>
  56. > kvx:dump().
  57. NAME STORAGE TYPE MEMORY (MB) ELEMENTS
  58. id_seq disc_copies 0.00 0
  59. writer disc_copies 0.00 0
  60. emails disc_copies 0.00 0
  61. reader disc_copies 0.00 0
  62. Snapshot taken: {{2018,11,10},{5,2,38}}
  63. ok
  64. </code></figure>
  65. </section>
  66. <section>
  67. <h3>SEQ</h3>
  68. <p>Таблиця послідовностей id_seq зберігає лічильники для записів.
  69. Лічильники є глобальними та атомарними для кожної підтримуваної бази даних.
  70. Послідовності використовуються для генерації унікальних імен записам в розподіленій таблиці.
  71. Якщо імена в таблиці не є унікальними,
  72. то функція count може повернути значення, що відрізняється від поточної послідовності.
  73. </p>
  74. <figure><code>
  75. -record(id_seq, { thing = atom(),
  76. id = 0 :: integer() } ).
  77. </code></figure>
  78. <h4>seq(atom(), integer()) -> integer().</h4>
  79. <p>Збільшує на 1 та повертає id лічильника для конкретної таблиці.</p>
  80. <h4>count(atom()) -> integer().</h4>
  81. <p>Повертає кількість записів в таблиці.</p>
  82. </section>
  83. <section>
  84. <h3>BACKEND</h3>
  85. <p>Функції операцій з даними.
  86. </p>
  87. <h4>put(tuple()) -> ok | {error,any()}.</h4>
  88. <p>Зберігає запис.</p>
  89. <h4>get(atom(),any()) -> {ok,any()} | {error, not_found | duplicated }.</h4>
  90. <p>Виконує пошук запису.</p>
  91. <h4>delete(atom(),any()) -> ok | {error,any()}.</h4>
  92. <p>Видаляє запис.</p>
  93. <h4>index(atom(),any(),any()) -> list(tuple()).</h4>
  94. <p>Виконує пошук запису за індексованим полем та заданим значенням.</p>
  95. </section>
  96. <section>
  97. <p>Цей модуль може бути пов'язаним з:
  98. <a href="kvx_fs.htm"><b>kvx_fs</b></a>,
  99. <a href="kvx_mnesia.htm"><b>kvx_mnesia</b></a>,
  100. <a href="kvx_rocks.htm"><b>kvx_rocks</b></a>,
  101. <a href="kvx_st.htm"><b>kvx_st</b></a>,
  102. <a href="kvx_stream.htm"><b>kvx_stream</b></a>.
  103. </p>
  104. </section>
  105. </main>
  106. <footer>
  107. 2005&mdash;2019 &copy; Synrc Research Center
  108. </footer>
  109. </body>
  110. </html>