leveldb
LevelDB.cr
Crystal bindings for Google LevelDB
Requirements
- macOS:
brew install leveldb
- Ubuntu/Debian:
sudo apt-get install -y libleveldb-dev
Install
Add to shard.yml
:
dependencies:
leveldb:
github: kojix2/leveldb
Then install:
shards install
Quick start
require "leveldb"
# Using keyword arguments
opts = LevelDB::Options.new(create_if_missing: true)
LevelDB::DB.open("/tmp/mydb", opts) do |db|
db.put "hello", "world"
db["hello"] # => "world"
db.delete "hello"
db["hello"] # => nil
end
Options
Configure LevelDB with keyword arguments:
opts = LevelDB::Options.new(
create_if_missing: true,
write_buffer_size: 4 * 1024 * 1024,
max_open_files: 100,
compression: LevelDB::LibLevelDB::Compression::SnappyCompression
)
Or use setters after initialization:
opts = LevelDB::Options.new
opts.create_if_missing = true
opts.write_buffer_size = 4 * 1024 * 1024
Iterate
opts = LevelDB::Options.new(create_if_missing: true)
LevelDB::DB.open("/tmp/mydb", opts) do |db|
# Simple iteration
db.each_string { |k, v| puts "#{k} => #{v}" }
# Manual iteration with control
db.iterator do |it|
it.seek("b")
while it.valid?
puts "#{it.key_string} => #{it.value_string}"
it.next
end
it.check_error
end
end
Batch
opts = LevelDB::Options.new(create_if_missing: true)
LevelDB::DB.open("/tmp/mydb", opts) do |db|
batch = LevelDB::WriteBatch.build do |b|
b.put "user:1", "Alice"
b.put "user:2", "Bob"
b.delete "old"
end
db.write batch
batch.close
end
Snapshots
opts = LevelDB::Options.new(create_if_missing: true)
LevelDB::DB.open("/tmp/mydb", opts) do |db|
db.put "key", "version1"
snapshot = db.create_snapshot
db.put "key", "version2"
# Read from snapshot
read_opts = LevelDB::ReadOptions.new
read_opts.snapshot = snapshot
db.get_string("key", read_opts) # => "version1"
db.get_string("key") # => "version2"
db.release_snapshot(snapshot)
end
Errors
On failure, methods raise LevelDB::Error
.
Tests
crystal spec
Repository
leveldb
Owner
Statistic
- 0
- 0
- 1
- 0
- 0
- 6 days ago
- October 12, 2025
License
MIT License
Links
Synced at
Sun, 19 Oct 2025 00:02:50 GMT
Languages