rocksdb

package module
v0.0.0-...-f054442 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 4, 2025 License: Apache-2.0 Imports: 8 Imported by: 0

README

jurocksdb

A cgo library for rocksdb

只进行了部分测试,这个库更多的可以作为如何使用 rocksdb 项目的示例和参考,并没有集成完整的 rocksdb 功能

Documentation

Overview

Package rocksdb 不同的平台需要安装对应的库,参考这个官方文档:https://github.com/facebook/rocksdb/blob/main/INSTALL.md Windows 平台使用 msys2 mingw64 编译,代码中的库是针对这个编译器。

这个项目只在 Ubuntu 22.04.1 和 Windows 下编译,其它平台需要自行编译/下载/安装对应的 rocksdb 以及依赖库。 -L 指定库目录,如果没有 -L 则从环境变量加载库目录,windows下集成了需要的静态库,Linux下只集成了 librocksdb 的静态库,其它库从环境加载,需要提前安装。

Windows 平台对应的 rocksdb 信息: Base Package: mingw-w64-rocksdb Description: Embedded key-value store for fast storage (mingw-w64) Homepage: https://rocksdb.org/ Repository: https://github.com/facebook/rocksdb/ Documentation: https://rocksdb.org/docs/ License(s): Apache-2.0 OR GPL-2.0-or-later Version: 9.10.0-1 Installation: pacman -S mingw-w64-x86_64-rocksdb Build Date:2025-01-09 20:13:21

Linux平台使用的 librocks.a 是从使用最新的 v10.0.1(03/05/2025) 编译的

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Restore

func Restore()

func RestoreBackup

func RestoreBackup(dbPath, backupPath string, backupId int) bool

func SetErrLang

func SetErrLang(errLangString func(err []byte) string)

SetErrLang rocksdb 返回的错误字符串编码是当前运行环境的语言编码相关的,必然运行环境是中文GBK, 则需要相应的转码才能正确显示内容。鉴于语言编码众多,用户自行设置转码操作。如果不设置这个函数,默认 就按 utf-8 编码来对待,大多数因为字符可以正确显示,但是如果当前平台编码不是 utf-8,则可能乱码。

func TestBackup

func TestBackup()

Types

type BackupEngine

type BackupEngine struct {
	// contains filtered or unexported fields
}

func (*BackupEngine) Close

func (be *BackupEngine) Close()

func (*BackupEngine) CreateBackup

func (be *BackupEngine) CreateBackup(db *Db) bool

CreateBackup 即使没有新的数据,这个函数也会创建一个新的备份点,但是它的内容和上一次的备份点是相同的

func (*BackupEngine) GetInfo

func (be *BackupEngine) GetInfo()

func (*BackupEngine) Open

func (be *BackupEngine) Open(backupPath string, opts *Options) bool

func (*BackupEngine) Restore

func (be *BackupEngine) Restore(restorePath string, backupId int) bool

func (*BackupEngine) Verify

func (be *BackupEngine) Verify(backupId int) bool

type ColumnFamily

type ColumnFamily struct {
	// contains filtered or unexported fields
}

func (*ColumnFamily) Close

func (cf *ColumnFamily) Close()

func (*ColumnFamily) Delete

func (cf *ColumnFamily) Delete(key []byte) error

func (*ColumnFamily) DeleteBatch

func (cf *ColumnFamily) DeleteBatch(keys [][]byte) error

func (*ColumnFamily) DeletePrefix

func (cf *ColumnFamily) DeletePrefix(prefix []byte) (int, error)

func (*ColumnFamily) DeleteRange

func (cf *ColumnFamily) DeleteRange(start, end []byte) error

DeleteRange 这个函数是枚举然后单独删除数据的代替版 start 和 end 可以传 nil,但是都是 nil 的时候不会匹配任何键,所以不会删除任何数据 nil 和 0 字节的有效指针效果是一样的,函数删除时匹配 start,但是不匹配 end,也就是和 start 相同的键会被删除,但是和 end 相同的键会被保留,只删除 end 之前的键。

func (*ColumnFamily) Get

func (cf *ColumnFamily) Get(key []byte) ([]byte, error)

func (*ColumnFamily) GetMulti

func (cf *ColumnFamily) GetMulti(keys [][]byte, cb func(key, val []byte)) error

GetMulti 批量获取多个键的值,相对于多次读取更优化, 每个 key 都不能是 nil 否则会报错. 如果某个 key 不存在对应的项,则回调函数里不会包含它,也就是只返回存在的项

func (*ColumnFamily) ListPrefix

func (cf *ColumnFamily) ListPrefix(prefix []byte, cb func(key, val []byte) bool)

ListPrefix 列出指定前缀的项,返回 false 终止,如何要列出全部项,传入一个长度为 0 的 prefix,但是不能是 nil,防止误操作

func (*ColumnFamily) ListRange

func (cf *ColumnFamily) ListRange(start, end []byte, cb func(key, val []byte) bool)

ListRange 列出指定范围的键值对, key == start, 在范围内,key == end 不在范围内 start 和 end 长度都为 0 时,不会返回全部条目,遍历全部键使用 ListPrefix(nil,cb)

func (*ColumnFamily) Put

func (cf *ColumnFamily) Put(key, value []byte) error

func (*ColumnFamily) PutBatch

func (cf *ColumnFamily) PutBatch(keys, values [][]byte) error

PutBatch 批量写入键值对, 函数不会对keys进行查重,所以如果key有重复,会被覆盖

type Db

type Db struct {
	// contains filtered or unexported fields
}

func Open

func Open(path string, opts *Options) (*Db, error)

func (*Db) AddColumnFamily

func (rdb *Db) AddColumnFamily(addNames []string, opts *Options) bool

AddColumnFamily 添加 column family,这个函数会先检测要添加的是否已经存在,如果已经存在, 直接返回成功,不做任何更改

func (*Db) Close

func (rdb *Db) Close()

func (*Db) DeleteColumnFamily

func (rdb *Db) DeleteColumnFamily(name string) (bool, error)

func (*Db) GetColumnFamily

func (rdb *Db) GetColumnFamily(name string) *ColumnFamily

func (*Db) GetDefault

func (rdb *Db) GetDefault() *ColumnFamily

func (*Db) ListColumnFamily

func (rdb *Db) ListColumnFamily() []string

type Options

type Options struct {

	// CreateIfMissing 如果数据库不存在,是否创建新数据库
	// 默认值: true
	// 设为 false 时,若数据库不存在,打开会失败
	CreateIfMissing bool

	//CreateColumnFamiliesIfMissing 打开数据库时自动生成不存在的 column families
	//当前默认值 true,rocksdb 内部默认值是 false
	CreateColumnFamiliesIfMissing bool

	// IncreaseParallelism 增加后台线程的并行度,提升压缩和刷写性能
	// 默认值: 0
	// 通常设置为 CPU 核心数或稍低值,0 表示不调整
	IncreaseParallelism int

	// ErrorIfExists 如果数据库已存在,是否报错
	// 默认值: false
	// 设为 true 时,若数据库已存在,打开会失败
	ErrorIfExists bool

	// WriteBufferSize MemTable 的大小(字节),影响内存使用和写性能
	// 默认值: 0
	// 增大可减少刷盘频率,但占用更多内存
	WriteBufferSize int

	// MaxOpenFiles 最大打开文件数,影响文件句柄使用
	// 默认值: 0
	// 设为 -1 表示无限制,小值可能导致性能下降
	MaxOpenFiles int

	// DisableWAL 是否禁用 Write-Ahead Log(WAL)
	// 默认值: false
	// 设为 true 时,禁运 WAL 数据库降不会再记录写日志,但是数据库崩溃时,可能造成数据丢失。
	DisableWAL bool

	// CompressionType 数据压缩类型,影响存储空间和读写性能
	// 默认值: "snappy" (支持: "none", "snappy", "zlib", "bzip2", "lz4", "zstd")
	// "none" 表示无压缩,"snappy" 平衡速度和压缩率
	CompressionType string

	// TargetFileSizeBase 每个 SST 文件的目标大小(字节)
	// 默认值: 0
	// 影响压缩和读取性能,小值增加文件数,大值减少文件数
	TargetFileSizeBase uint64

	// MaxBackgroundJobs 后台任务(如压缩、刷盘)的最大线程数
	// 默认值: 0
	// 增大可提升后台处理速度,但消耗更多 CPU
	MaxBackgroundJobs int

	// AllowConcurrentMemtableWrite 是否允许多线程并发写入 MemTable
	// 默认值: false (RocksDB 6.7+ 支持)
	// 设为 true 可提升多线程写性能
	AllowConcurrentMemtableWrite bool

	//KeepLogFileNum 控制 RocksDB 操作日志(LOG 和 LOG.old.* 文件)的保留数量
	KeepLogFileNum int

	//RecycleLogFileNum 控制 RocksDB 中 WAL 文件(.log)的回收数量,用于减少文件系统的创建和删除开销。
	//默认值:0,表示不回收 WAL 文件,过期后直接删除。
	RecycleLogFileNum int
	// contains filtered or unexported fields
}

Options 定义 RocksDB 的数据库打开选项

func GetDefaultOptions

func GetDefaultOptions() *Options

GetDefaultOptions 返回默认的 RocksDB 选项

func (*Options) Close

func (opt *Options) Close()

Close Options 绑定了 C 内置资源,用完需要 free 释放

func (*Options) Create

func (opt *Options) Create()

func (*Options) Get

func (opt *Options) Get()

Get Options 绑定了 C 内置资源,用完需要 free 释放

func (*Options) Set

func (opt *Options) Set()

Set 将 Go 的 Options 应用到 RocksDB 的 C 选项

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL