Lean & mean Tokyo Cabinet recipes (with Lua)
Lua Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
expire No commit message Jul 8, 2009
high-low-game link to mikio's post Jul 7, 2009
increment-command simple echo extension with Lua (nothign is stored in TC) Jul 7, 2009
inverted-index simple inverted index via TC's key-value store Jul 8, 2009
sets Set operations with Lua + TC Jul 8, 2009


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
make && make install

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

gem install rufus-tokyo

Source: 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