jurocksdb

package module
v0.0.0-...-0f94a1f Latest Latest
Warning

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

Go to latest
Published: Apr 24, 2025 License: Apache-2.0 Imports: 7 Imported by: 0

README

jurocksdb

A cgo library for rocksdb

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

Documentation

Overview

Package jurocksdb 不同的平台需要安装对应的库,参考这个官方文档: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

This section is empty.

Types

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

type Options struct {
	// CreateIfMissing 如果数据库不存在,是否创建新数据库
	// 默认值: true
	// 设为 false 时,若数据库不存在,打开会失败
	CreateIfMissing 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 时,数据仅存内存,程序退出后丢失,适合临时数据库
	DisableWAL bool

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

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

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

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

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

func GetDefaultOptions

func GetDefaultOptions() *Options

GetDefaultOptions 返回默认的 RocksDB 选项

type RocksCf

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

func OpenCf

func OpenCf(path string, options *Options, addNames []string) (*RocksCf, error)

func (*RocksCf) Close

func (dbcf *RocksCf) Close()

func (*RocksCf) DeleteCf

func (dbcf *RocksCf) DeleteCf(name string) (bool, error)

func (*RocksCf) GetCf

func (dbcf *RocksCf) GetCf(name string) *ColumnFamily

func (*RocksCf) ListCf

func (dbcf *RocksCf) ListCf() []string

type RocksDb

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

func Open

func Open(path string, options *Options) (*RocksDb, error)

func (*RocksDb) Close

func (db *RocksDb) Close()

func (*RocksDb) Delete

func (db *RocksDb) Delete(key []byte) error

func (*RocksDb) DeleteBatch

func (db *RocksDb) DeleteBatch(keys [][]byte) error

func (*RocksDb) DeletePrefix

func (db *RocksDb) DeletePrefix(prefix []byte) (int, error)

func (*RocksDb) Get

func (db *RocksDb) Get(key []byte) ([]byte, error)

func (*RocksDb) GetMulti

func (db *RocksDb) GetMulti(keys [][]byte, cb func(key, val []byte)) error

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

func (*RocksDb) ListPrefix

func (db *RocksDb) ListPrefix(prefix []byte, cb func(key, val []byte) bool)

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

func (*RocksDb) ListRange

func (db *RocksDb) ListRange(start, end []byte, cb func(key, val []byte) bool)

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

func (*RocksDb) Put

func (db *RocksDb) Put(key, value []byte) error

func (*RocksDb) PutBatch

func (db *RocksDb) PutBatch(keys, values [][]byte) error

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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