SCDB: простая Open Source БД типа «ключ - значение»

Представляем SCDB, то есть Solid-Core-Database. Этот проект еще находится на ранних стадиях разработки и задуман для решения задач и проблем разработчиков.

Что такое SCDB?

  • scdb  —  легковесная, простая и скоростная подсистема хранения данных типа «ключ  —  значение». Сделана она по примеру архитектуры хранилища Bitcask, эффективной при операциях записи.
  • Основной принцип проектирования scdb и Bitcask  —  журналируемые файловые системы. Здесь все изменения добавляются в конец журнала, а записи очень быстрые, так как выполняются последовательно. При таком построении, помимо скорости, обеспечивается целостность данных: даже в случае отказа системы они легко восстанавливаются благодаря этому методу с возможностью только добавлять.
  • В scdb реализован процесс объединения лог-файлов. Со временем вместе с записываемыми приложением данными увеличивается и количество лог-файлов. Объединением лог-файлов предотвращается фрагментация, поддерживается производительность. Для данных это как домашняя уборка, после которой хранилище остается организованным и эффективным.
  • Созданная для беспроблемного хранения и извлечения пар «ключ  —  значение», SCDB придется кстати разработчикам приложений с быстрой записью данных и простым, но надежным хранилищем.
Архитектура Bitcask

Пример

$ docker pull skj2414e954/scdb:latest

$ docker run -d -p 50051:50051 -p 6727:6727 skj2414e954/scdb:latest

Пример кода:

go get -u github.com/sjy-dv/scdb/scdb/pkg/scdbclient/[email protected]
package main

import (
"context"
"log"

scdbclient "github.com/sjy-dv/scdb/scdb/pkg/scdbclient/v1beta"
)

func main() {
conn, err := scdbclient.NewScdbConn("127.0.0.1:50051")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
err = conn.Ping(context.Background())
if err != nil {
log.Fatal(err)
}
err = conn.Save(context.Background(), []byte("greeting"), []byte("helloworld"))
if err != nil {
log.Fatal(err)
}
val, err := conn.Get(context.Background(), []byte("greeting"))
if err != nil {
log.Fatal(err)
}
log.Println(string(val))
err = conn.Del(context.Background(), []byte("greeting"))
if err != nil {
log.Fatal(err)
}
}

Недавно в SCDB добавили поддержку протокола TCP, но это изменение пока не отражено в клиентской библиотеке.

Будущие направления

SCDB еще находится на ранних стадиях разработки, сейчас через клиентом поддерживаются базовые CRUD-операции. Однако в упомянутом выше обновлении к единственному поддерживаемому протоколу GRPC добавлен TCP. Пока SCDB доступна только на Go, в будущем планируется охватить и другие клиентские SDK.

Важно отметить: исходный код SCDB остается открытым, она не конкурирует с аналогичными БД вроде Redis или Badger. Мы постоянно работаем над обновлениями и сейчас сфокусированы на подготовке к транзакциям.

В долгосрочной перспективе планируется поддержка кластеризации с алгоритмом Raft. Конечная цель  —  стать не базой данных номер один, но доступной и понятной для разработчиков-джунов и руководителей стартапов, которые испытывают трудности с документацией или настройкой БД. Реализовать кластеризацию даже в самых простых базах данных поначалу бывает непросто.

Надеемся облегчить разработчикам эту задачу, превратив SCDB в адекватную их кратко-, средне- и долгосрочным потребностям базу данных в оперативной памяти.

Не забывайте, однако, что SCDB разработана как модель высокой доступности.

GitHub.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи J.Nyx: SCDB: Easy to Use Opensource Key-Value Database

Предыдущая статьяSwift: ссылочные типы и циклы сохранения, weak и unowned
Следующая статьяСовременный подход к разработке Angular