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



Книга 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.



203   0  

Comments

    Ничего не найдено.