All Projects → igrigorik → Tokyo Recipes

igrigorik / Tokyo Recipes

Lean & mean Tokyo Cabinet recipes (with Lua)

Programming Languages

lua
6591 projects

Video of FutureRuby talk ("Lean & Mean Tokyo Cabinet Recipes") on InfoQ:

Tokyo Cabinet is a library of routines for managing a database. The database is a simple data file containing records, each is a pair of a key and a value. Every key and value is serial bytes with variable length. Both binary data and character string can be used as a key and a value. There is neither concept of data tables nor data types. Records are organized in hash table, B+ tree, or fixed-length array.

== User Defined Functions (UDF's) via Lua

As of mid '08, Hirabayashi-san embedded Lua into Tokyo Cabinet's runtime to allow for easy extensibility of the database. There is a common set of Lua API's built in, which allow you to interact with the underlying data, execute your extensions remotely, or even on a timer. This allows us to build additional functionality on top of the Tokyo Cabinet database with Lua!

A few examples you will find in this repository:

  • Simple echo application
  • Implemention of sets operations (like Redis) on top of TC
  • Example of executing Map-Reduce jobs on data within TC
  • TTL / Expire functionality (like memcached)
  • and many others...

Please do fork the repo and add your recipes to the list!

== Installing Tokyo Cabinet with Lua yum install lua lua-devel

git clone git://github.com/etrepum/tokyo-cabinet.git git clone git://github.com/etrepum/tokyo-tyrant.git

(or get latest files from sourceforge: http://sourceforge.net/projects/tokyocabinet/files/)

cd tokyo-cabinet ./configure make && make install

cd tokyo-tyrant ./configure --enable-lua make && make install

gem install rufus-tokyo

Source: http://openwferu.rubyforge.org/tokyo.html

== Invoking Lua extensions via the HTTP interface

It is possible to invoke custom Lua functions via direct HTTP calls. For example, using the echo-command example, we can invoke the function via:

$ curl -i -X POST -H “X-TT-XNAME: echo” http://localhost:1978/foo -d “bar”

HTTP/1.1 200 OK Content-Type: application/octet-stream Content-Length: 7

foo:bar

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].