Popularity
7.2
Growing
Activity
0.3
Declining
30
4
7

Programming language: Crystal
License: MIT License
Tags: Database Drivers    
Latest version: v0.5.1

rocksdb.cr alternatives and similar shards

Based on the "Database Drivers" category.
Alternatively, view rocksdb.cr alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of rocksdb.cr or a related project?

Add another 'Database Drivers' Shard

README

rocksdb.cr Build Status

RocksDB client for Crystal.

  • crystal: 0.27.2 0.31.1 0.32.1 0.33.0 0.34.0

Supported API

See [API](./API.md)

Installation

Add this to your application's shard.yml:

dependencies:
  rocksdb:
    github: maiha/rocksdb.cr
    version: 0.5.1

Usage

require "rocksdb"

db = RocksDB::DB.new("tmp/db1")

db.put("foo", "1")
db.get("foo")      # => "1"
db.delete("foo")

db.get("foo")      # => ""
db.get?("foo")     # => nil
db.get!("foo")     # raise RocksDB::NotFound.new("foo")

db.close

readonly mode

db = RocksDB::DB.new("tmp/db1", readonly: true)
# or RocksDB::DB.read("tmp/db1")
db.put("foo", "1")  # raise RocksDB::Error("Not supported operation in read only mode.")

Iterations

3.times{|i| db.put("k#{i}", i) }
db.keys            # => ["k0","k1","k2"]
db.keys(2)         # => ["k0","k1"]

db.each do |k,v|
  ...

Iterator

iter = db.new_iterator
iter.key           # => "k0"
iter.next
iter.value         # => "1"
iter.first
iter.key           # => "k0"
iter.seek("k2")
iter.next
iter.valid?        # => false

iter.close  # memory leaks when you forget this
  • same as each
iter = db.new_iterator
iter.first
while (iter.valid?)
  # yield {iter.key, iter.value}
  iter.next
end  
iter.close  # memory leaks when you forget this

binary data

Although all data are stored as Binary in RocksDB, return value will be converted to String when accessed by String key.

db.put(Bytes[0], Bytes[9])
db.get(Bytes[0])  # => Bytes[9]
db.get("\u{0}")   # => "\t"

binary iterator

binary_XXX is available to treat data as binary

  • binary_keys
  • binary_each
  • new_binary_iterator
db.keys        # => ["\t"]
db.binary_keys # => [Bytes[9]]

database options

  • options for opening database
  • read_options for reading data
  • write_options for writing data
opts = RocksDB::Options.new
opts.set_create_if_missing(1)

ropts = RocksDB::ReadOptions.new
ropts.set_verify_checksum(1)

wopts = RocksDB::WriteOptions.new
wopts.set_sync(1)
wopts.disable_wal(1)

db = RocksDB::DB.new("tmp/db1", options: opts, read_options: ropts, write_options: wopts)
  • all options: [options.cr](./src/rocksdb/options.cr)

Roadmap

0.5.0

  • [x] Iterations for Binary

Testing

Contributing

  1. Fork it ( https://github.com/maiha/rocksdb.cr/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • maiha maiha - creator, maintainer