1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/roseduan-rosedb

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Что такое ROSEDB

rosedb — это легковесный, быстрый и надёжный механизм хранения данных типа «ключ-значение», основанный на модели хранения Bitcask.

Дизайн Bitcask частично вдохновлён файловыми системами с логической структурой и объединением лог-файлов.

Статус

rosedb хорошо протестирован и готов к использованию в продакшене. Существует несколько проектов, использующих rosedb в качестве механизма хранения в продакшене.

Не нашли нужную функцию? Не стесняйтесь открыть вопрос или PR, мы активно разрабатываем проект.

Обзор дизайна

Файлы логов RoseDB используют WAL (Write Ahead Log) в качестве бэкенда. Это файлы с блокировкой кэша, которые можно только дополнять.

wal: https://github.com/rosedblabs/wal

Основные функции

Преимущества

Низкая задержка при чтении или записи одного элемента Это связано с тем, что файлы базы данных Bitcask записываются один раз и дополняются.
Высокая пропускная способность, особенно при записи входящего потока случайных элементов Операции записи в RoseDB обычно насыщают ввод-вывод и пропускную способность диска, что является хорошим показателем с точки зрения производительности. Эта насыщенность возникает по двум причинам: потому что (1) данные, записанные в RoseDB, не нужно упорядочивать на диске, и (2) дизайн Bitcask с логической структурой позволяет минимизировать перемещение диска во время записи.
Возможность обрабатывать наборы данных больше, чем RAM без деградации Доступ к данным в RoseDB включает прямой поиск из структуры данных индекса в памяти. Это делает поиск данных очень эффективным, даже когда наборы данных очень большие.
Однократный поиск для получения любого значения Структура данных индекса ключей в памяти RoseDB напрямую указывает на места на диске, где находятся данные. RoseDB никогда не использует более одного поиска по диску для чтения значения, а иногда даже этого не требуется из-за кеширования файловой системы, выполняемого операционной системой.
Предсказуемая производительность поиска и вставки По причинам, перечисленным выше, операции чтения из RoseDB имеют фиксированное предсказуемое поведение. То же самое верно и для операций записи в RoseDB, поскольку операции записи требуют максимум одного поиска до конца текущего открытого файла, за которым следует добавление к этому файлу.
Быстрое восстановление после сбоя с ограниченными потерями Восстановление после сбоя легко и быстро с RoseDB, потому что файлы RoseDB добавляются только один раз и записываются единожды. Единственные элементы, которые могут быть потеряны, — это частично записанные записи в конце последнего файла, который был открыт для записи. Операциям восстановления необходимо просмотреть запись и проверить данные CRC, чтобы убедиться, что данные непротиворечивы.
Простое резервное копирование В большинстве систем резервное копирование может быть очень сложным. RoseDB упрощает этот процесс благодаря своему формату добавления и однократной записи на диск. Любая утилита, которая архивирует или копирует файлы в порядке блоков диска, правильно создаст резервную копию или скопирует базу данных RoseDB.
Пакетные опции, гарантирующие атомарность, согласованность и долговечность RoseDB поддерживает пакетные операции, которые являются атомарными, согласованными и долговечными. Новые записи в пакете кэшируются в памяти перед фиксацией. Если пакет успешно зафиксирован, все записи в пакете будут сохранены на диск. Если фиксация пакета завершится неудачно, все записи в нём будут отброшены.
Поддержка итератора для прямого и обратного хода RoseDB поддерживает итератор для прямого и обратного хода. Итератор основан на структуре данных индекса ключей в памяти, которая напрямую указывает на местоположения на диске, где живут данные. Итератор очень эффективен, даже если... **Наборы данных очень большие.**

Поддержка отслеживания ключей. RoseDB поддерживает отслеживание ключей, вы можете получать уведомления об изменениях ключей в базе данных.

Поддержка истечения срока действия ключей. RoseDB поддерживает истечение срока действия ключей, вы можете установить срок действия для ключей.

Недостатки

Все ключи должны помещаться в памяти. RoseDB всегда хранит все ключи в памяти, это означает, что ваша система должна иметь достаточно памяти для хранения всего пространства ключей плюс дополнительное пространство для других операционных компонентов и буферного пространства файловой системы, резидентной в операционной системе.

Начало работы

Основные операции

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()

Дополнительные сведения см. в примерах.

Сообщество

Приглашаем присоединиться к каналу Slack и Обсуждениям, чтобы общаться с разработчиками команды RoseDB и другими пользователями.

Участники проекта

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Go
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/roseduan-rosedb.git
git@api.gitlife.ru:oschina-mirror/roseduan-rosedb.git
oschina-mirror
roseduan-rosedb
roseduan-rosedb
main