Представляем SCDB, то есть Solid-Core-Database. Этот проект еще находится на ранних стадиях разработки и задуман для решения задач и проблем разработчиков.
Что такое SCDB?
scdb
— легковесная, простая и скоростная подсистема хранения данных типа «ключ — значение». Сделана она по примеру архитектуры хранилища Bitcask, эффективной при операциях записи.- Основной принцип проектирования
scdb
и Bitcask — журналируемые файловые системы. Здесь все изменения добавляются в конец журнала, а записи очень быстрые, так как выполняются последовательно. При таком построении, помимо скорости, обеспечивается целостность данных: даже в случае отказа системы они легко восстанавливаются благодаря этому методу с возможностью только добавлять. - В
scdb
реализован процесс объединения лог-файлов. Со временем вместе с записываемыми приложением данными увеличивается и количество лог-файлов. Объединением лог-файлов предотвращается фрагментация, поддерживается производительность. Для данных это как домашняя уборка, после которой хранилище остается организованным и эффективным. - Созданная для беспроблемного хранения и извлечения пар «ключ — значение», SCDB придется кстати разработчикам приложений с быстрой записью данных и простым, но надежным хранилищем.
Пример
$ 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 разработана как модель высокой доступности.
Читайте также:
- Будущее данных: децентрализованная графовая база данных
- Встроенная база данных Python
- Как организовать свою систему обработки данных: кейс mondayDB
Читайте нас в Telegram, VK и Дзен
Перевод статьи J.Nyx: SCDB: Easy to Use Opensource Key-Value Database