github.com/mdigger/keystore (go): 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.
Keywords: golang|key-value|key-value-store|store