kiwi

A unified Crystal interface for key-value stores memorystore
0.1.0 Latest release released

Crystal Kiwi Crystal Kiwi - interface of key-value storages

A simple unified Crystal interface for key-value stores.

Installation

Add this to your application's shard.yml:

dependencies:
  kiwi:
    github: greyblake/crystal-kiwi

Usage

All the stores have the same simple interface defined by Kiwi::Store:

  • set(key : String, value : String) : String
  • get(key : String) : String|Nil
  • delete(key : String) : String|Nil
  • clear
  • []=(key : String, value) : String - alias for set
  • [](key : String) : String - alias for get

MemoryStore

require "kiwi/memory_store"

store = Kiwi::MemoryStore.new

store.set("key", "value")
store.get("key")  # => "value"
store.delete("key")
store.clear

# Or your can use Hash-like methods:
store["key"] = "new value"
store["key"]  # => "new "value"

FileStore

require "kiwi/file_store"

store = Kiwi::FileStore("/tmp/kiwi")

RedisStore

RedisStore requires you to have redis shard.

require "redis"
require "kiwi/redis_store"

store = Kiwi::RedisStore(Redis.new)

LevelDBStore

RedisStore requires you to have levelDB shard.

require "leveldb"
require "kiwi/leveldb_store"

leveldb = LevelDB::DB.new("./db")
store = Kiwi::LevelDBStore(leveldb)

MemcachedStore

MemcachedStore requires you to have memcached shard.

require "memcached"
require "kiwi/memcached_store"

store = Kiwi::MemcachedStore.new(Memcached::Client.new)

Benchmark

The following table shows operations per second for every particular store on my machine.

| | set | get | get(empty) | delete | | ------------------:| -------:| -------:| ----------:| --------:| | MemoryStore | 3056000 | 4166000 | 4074000 | 10473000 | | LevelDBStore | 120000 | 193000 | 253000 | 37000 | | RedisStore | 41000 | 42000 | 42000 | 21000 | | MemcachedStore | 38000 | 41000 | 40000 | 21000 | | FileStore | 27000 | 66000 | 73000 | 8000 |

Data information:

  • Key size: 5-100 bytes.
  • Value size: 10-1000 bytes.
  • Number of items: 100,000

Environment information:

  • CPU: Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
  • File System: ext4, SSD
  • RAM: DDR3, 1600 MHz
  • Operating system: 3.16.0-4-amd64 x86_64 GNU/Linux

Results can vary on different systems depending on hardware(CPU, RAM, HDD/SSD) and software(OS, file system, etc).

Running benchmark

make benchmark

Tests

Run specs for all stores:

make test

Run spec for a particular store:

crystal spec ./spec/kiwi/file_store_spec.cr

Contributors

  • greyblake Sergey Potapov - creator, maintainer.
  • mauricioabreu Mauricio de Abreu Antunes - thanks for MemcachedStore.
kiwi:
  github: crystal-community/kiwi
  version: ~> 0.1.0
License MIT
Crystal none

Authors

Dependencies 0

Development Dependencies 2

  • memcached master
    {'branch' => 'master', 'github' => 'comandeo/crystal-memcached'}
  • redis ~> 1.6.5
    {'github' => 'stefanwille/crystal-redis', 'version' => '~> 1.6.5'}

Dependents 0

Last synced .
search fire star recently