Project

sparkey

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Ruby FFI bindings for Spotify's Sparkey
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 1.3
>= 0
>= 0

Runtime

>= 0
 Project Readme

Sparkey

Ruby FFI bindings to Spotify's Sparkey key-value store.

Installation

Requirements

Add this line to your application's Gemfile:

gem 'sparkey'

And then execute:

$ bundle

Or install it yourself as:

$ gem install sparkey

Design

This gem aims to expose all of Sparkey's native functionality to Ruby via FFI bindings.

Additionally, it provides higher-level abstractions around the native functionality to provide a more idiomatic Ruby interface.

Low Level

Sparkey::Native is intended to expose the raw C functions from Sparkey to Ruby via FFI and nothing more.

Use this interface if you are adding Ruby classes and methods to expose new Sparkey functionality. A solid understanding of the FFI API will be required.

Sparkey::Native should wrap all available functions from sparkey.h. If you find one missing please submit a Pull Request.

Mid Level

This gem exposes Ruby-ish versions of most of Sparkey's public data structures and their related functions.

Use these interfaces if you need more control over the specific behavior of Sparkey than the Sparkey::Store API provides.

High Level

The Sparkey::Store API provides a very small interface for using Sparkey as a generic key-value store.

Use the Sparkey::Store API if you only need a fast persistent key-value store and don't want to delve into Sparkey specifics.

Usage

  require "sparkey"

  # Creates or overwrites the Sparkey file.
  sparkey = Sparkey.create("sparkey_store")

  # Opens an existing Sparkey file.
  # sparkey = Sparkey.open("sparkey_store")

  sparkey.put("first", "Hello")
  sparkey.put("second", "World")
  sparkey.put("third", "Goodbye")
  sparkey.flush

  puts sparkey.size
  #=> 3

  puts sparkey.get("second")
  #=> "World"

  sparkey.put("fourth", "Again")
  sparkey.delete("second")
  sparkey.delete("third")
  sparkey.flush

  puts sparkey.size
  #=> 2

  collector = Hash.new
  sparkey.each do |key, value|
    collector[key] = value
  end

  sparkey.close

  puts collector
  #=> { "first" => "Hello", "fourth" => "Again" }

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Ensure all tests pass (rake test)
  5. Push to the branch (git push origin my-new-feature)
  6. Create new Pull Request