РОСЕДБ — что это?
ROSEDB — это лёгкое, быстрое и надёжное KV-хранилище, основанное на модели хранения Bitcask.
Модель хранения Bitcask была разработана под влиянием структурированных журналов файловых систем и объединения журнальных файлов.
Состояние
ROSEDB прошёл всестороннее тестирование и может безопасно использоваться в производственной среде. Некоторые пользователи уже используют ROSEBD в качестве хранилища в рабочей среде.
Если вы не нашли нужную вам функцию, пожалуйста, создайте issue или PR. В настоящее время проект активно поддерживается, и ваши запросы будут обработаны как можно скорее.
Обзор дизайна
Файлы данных ROSEBD используют предварительно записанный журнал (Write Ahead Log), который представляет собой файлы с блочным кешем, предназначенные только для добавления.
wal: https://github.com/rosedblabs/wal
Основные характеристики
Преимущества:
— Низкая задержка чтения и записи. Это связано со свойством добавления файлов модели хранения Bitcask, которое эффективно использует преимущества последовательного ввода-вывода.
— Высокая пропускная способность даже при полностью неупорядоченных данных. При записи данных в ROSEBD нет необходимости сортировать данные на диске, а дизайн структуры журнала Bitcask уменьшает перемещение магнитных головок диска во время процесса записи.
— Способность обрабатывать большие наборы данных без потери производительности. Доступ к данным в ROSEBD включает прямой поиск в индексных структурах памяти, что делает поиск данных очень эффективным, даже если набор данных очень большой.
— Возможность получить любую пару ключ-значение за один дисковый ввод-вывод. Индексные структуры памяти ROSEBD напрямую указывают на расположение данных на диске, устраняя необходимость многократного поиска диска для получения значения, иногда даже без необходимости поиска, благодаря файловой системе операционной системы и блочному кешу WAL.
— Стабильная производительность. Операции записи в ROSEBD требуют максимум одного поиска в конце текущего открытого файла, за которым следует добавление записи, обновляя память после завершения. Этот процесс не зависит от размера базы данных, обеспечивая стабильную производительность.
— Быстрое восстановление после сбоев. Восстановление после сбоя с использованием ROSEBD происходит легко и быстро, поскольку файлы ROSEBD предназначены только для однократной записи. Процесс восстановления требует проверки записей и верификации данных CRC для обеспечения целостности данных.
— Простое резервное копирование. В большинстве систем резервное копирование может быть сложным процессом. ROSEBD упрощает этот процесс благодаря своей структуре однократной записи на диск. Любые инструменты, которые архивируют или копируют файлы по порядку блоков диска, могут правильно создавать резервные копии или копировать базу данных ROSEBD.
— Атомарность, согласованность и долговечность пакетных операций. ROSEBD поддерживает пакетные операции, которые являются атомарными, согласованными и долговечными. Новые операции записи в пакетах сохраняются в памяти до успешной фиксации пакета. Если пакет успешно зафиксирован, все операции записи в пакете сохраняются на диск постоянно. Если фиксация пакета завершается неудачно, все операции записи в пакете отбрасываются. То есть либо все операции записи в одном пакете успешны, либо все они терпят неудачу.
— Поддержка итераторов с возможностью обратной и прямой итерации. ROSEDB поддерживает итераторы с прямой и обратной итерацией, которые могут начинаться с любого места в базе данных. Итераторы могут использоваться для сканирования всех пар ключ-значение в базе данных или для сканирования определённого диапазона пар ключ-значение. Итератор получает информацию о местоположении из индекса и затем непосредственно считывает данные с диска, обеспечивая высокую производительность итератора.
— Поддерживает функцию Watch. ROSEBD поддерживает функцию Watch, которая позволяет получать уведомления о событиях при изменении ключа в базе данных.
— Поддерживает срок действия ключа. Для ключа можно установить срок действия в ROSEBD, после которого ключ автоматически удаляется.
Недостатки:
— Все ключи должны храниться в памяти. ROSEBD всегда сохраняет все ключи в памяти, что означает, что ваша система должна иметь достаточно памяти для хранения всех ключей.
Быстрый старт
package main
import "github.com/rosedblabs/rosedb/v2"
func main() {
// Указываем опции
options := rosedb.DefaultOptions
options.DirPath = "/tmp/rosedb_basic"
// Открываем базу данных
db, err := rosedb.Open(options)
if err != nil {
panic(err)
}
defer func() {
_ = db.Close()
}()
// Устанавливаем пару ключ-значение
err = db.Put([]byte("name"), []byte("rosedb"))
if err != nil {
panic(err)
}
// Получаем пару ключ-значение
val, err := db.Get([]byte("name"))
if err != nil {
panic(err)
}
println(string(val))
// Удаляем пару ключ-значение
err = db.Delete([]byte("name"))
if err != nil {
panic(err)
}
}
// Создаём пакет
batch := db.NewBatch(rosedb.DefaultBatchOptions)
// Устанавливаем пару ключ-значение
_ = batch.Put([]byte("name"), []byte("rosedb"))
// Получаем пару ключ-значение
val, _ := batch.Get([]byte("name"))
println(string(val))
// Удаляем пару ключ-значение
_ = batch.Delete([]byte("name"))
// Фиксируем пакет
_ = batch.Commit()
Полный код можно найти в разделе примеров examples.
Приглашаем присоединиться к каналу Slack и обсуждениям, чтобы общаться с разработчиками и пользователями ROSEBD.
Также доступна группа в WeChat:
Можно отсканировать QR-код ниже, чтобы присоединиться к группе общения RoseDB и указать в примечании «rosedb».
![]() |
---|
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )