leveldb

LevelDB.cr

CI Lines of Code Static Badge

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