This repository has been archived by the owner on May 14, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
doc.go
42 lines (42 loc) · 4.01 KB
/
doc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Package keystore содержит реализацию простого хранилища данных по ключу
// (key-value store).
//
// Все данные хранятся в одном файле и не используют отдельного индекса.
// При первом открытии хранилища происходит построение индекса с содержимым
// файла и проверка целостности хранилища. Эта операция может занимать некоторое
// время при открытии действительно больших файлов, поэтому данная библиотека
// расчитана в первую очередь на небольшие хранилища.
//
// По умолчанию все записи в хранилище заканчиваются вызовом метода
// os.File.Sync, что позволяет быть до некоторой степени уверенными, что
// данные при сбое не потеряются. Но, к сожалению, это одновременно сильно
// замедляет любую операцию записи. Если вы хотите самостоятельно управлять
// операциями сброса кешей файловой системы, то можно вызвать метод
// db.SetSync(false) и затем вызывать метод db.Sync вручную из кода.
//
// При удалении или перезаписи значений, свободные участки помечаются
// специальным образом и в дальнейшем используются повторно, когда в них может
// уместиться новая запись. Таким образом файл не очень сильно разрастается
// при большом количестве удалений/вставок новый записей, при условии, что новые
// значения не превышают по объему удаленные.
//
// При работе с хранилищем поддерживаются групповые операции: db.Gets,
// db.Puts, db.Deletes. Так же добавлены методы для работы с данными
// в формате JSON и автоматического преобразования объектов в/из него.
//
// Работа с ключами хранилища и выборки данных поддерживается единственным
// методом db.Keys, который позволяет достаточно гибко выбирать только те
// ключи, которые соответствуют заданным критериям. Список ключей всегда
// возвращается в упорядоченном виде и может быть использован в дальнейшем
// для выполнения групповых операций.
//
// То, что ключи представлены в виде string не ограничивает вас в использовании
// бинарных данных. Например, ключ может быть и вида "\x00\x00\x00\xc7". Так
// что это говорит только о том, что ключ не может динамически изменять свое
// значение.
//
// Для облегчения работы с данной библиотекой все методы хранилища
// продублированы в виде глобальных функций, где первым параметром указывается
// имя файла с хранилищем. Открытые таким образом хранилища кешируются в
// глобальном списке и могут быть закрыты все сразу вызовом CloseAll.
package keystore