Path: | tokyotyrant.rb |
Last Update: | 2010-07-19 15:40:24 +0900 |
Tokyo Tyrant: network interface of Tokyo Cabinet
This module implements the pure Ruby client which connects to the server of Tokyo Tyrant and speaks its original binary protocol.
Tokyo Tyrant is a package of network interface to the DBM called Tokyo Cabinet. Though the DBM has high performance, you might bother in case that multiple processes share the same database, or remote processes access the database. Thus, Tokyo Tyrant is provided for concurrent and remote connections to Tokyo Cabinet. It is composed of the server process managing a database and its access library for client applications.
The server features high concurrency due to thread-pool modeled implementation and the epoll/kqueue mechanism of the modern Linux/*BSD kernel. The server and its clients communicate with each other by simple binary protocol on TCP/IP. Protocols compatible with memcached and HTTP/1.1 are also supported so that almost all principal platforms and programming languages can use Tokyo Tyrant. High availability and high integrity are also featured due to such mechanisms as hot backup, update logging, and replication. The server can embed Lua, a lightweight script language so that you can define arbitrary operations of the database.
Because the server uses the abstract API of Tokyo Cabinet, all of the six APIs: the on-memory hash database API, the on-memory tree database API, the hash API, the B+ tree database API, the fixed-length database API, and the table database API, are available from the client with the common interface. Moreover, the table extension is provided to use specifidc features of the table database.
Get this package and extract it.
Enter the directory of the extracted package then perform installation.
su ruby install.rb
The package `tokyotyrant' should be loaded in each source file of application programs.
require 'tokyotyrant'
All symbols of Tokyo Tyrant are defined in the module `TokyoTyrant'. You can access them without any prefix by including the module.
include TokyoTyrant
The following code is an example to use a remote database.
require 'tokyotyrant' include TokyoTyrant # create the object rdb = RDB::new # connect to the server if !rdb.open("localhost", 1978) ecode = rdb.ecode STDERR.printf("open error: %s\n", rdb.errmsg(ecode)) end # store records if !rdb.put("foo", "hop") || !rdb.put("bar", "step") || !rdb.put("baz", "jump") ecode = rdb.ecode STDERR.printf("put error: %s\n", rdb.errmsg(ecode)) end # retrieve records value = rdb.get("foo") if value printf("%s\n", value) else ecode = rdb.ecode STDERR.printf("get error: %s\n", rdb.errmsg(ecode)) end # traverse records rdb.iterinit while key = rdb.iternext value = rdb.get(key) if value printf("%s:%s\n", key, value) end end # hash-like usage rdb["quux"] = "touchdown" printf("%s\n", rdb["quux"]) rdb.each do |key, value| printf("%s:%s\n", key, value) end # close the connection if !rdb.close ecode = rdb.ecode STDERR.printf("close error: %s\n", rdb.errmsg(ecode)) end
The following code is an example to use a remote database with the table extension.
require 'tokyotyrant' include TokyoTyrant # create the object rdb = RDBTBL::new # connect to the server if !rdb.open("localhost", 1978) ecode = rdb.ecode STDERR.printf("open error: %s\n", rdb.errmsg(ecode)) end # store a record pkey = rdb.genuid cols = { "name" => "mikio", "age" => "30", "lang" => "ja,en,c" } if !rdb.put(pkey, cols) ecode = rdb.ecode STDERR.printf("put error: %s\n", rdb.errmsg(ecode)) end # store another record cols = { "name" => "falcon", "age" => "31", "lang" => "ja", "skill" => "cook,blog" } if !rdb.put("x12345", cols) ecode = rdb.ecode STDERR.printf("put error: %s\n", rdb.errmsg(ecode)) end # search for records qry = RDBQRY::new(rdb) qry.addcond("age", RDBQRY::QCNUMGE, "20") qry.addcond("lang", RDBQRY::QCSTROR, "ja,en") qry.setorder("name", RDBQRY::QOSTRASC) qry.setlimit(10) res = qry.search res.each do |rkey| rcols = rdb.get(rkey) printf("name:%s\n", rcols["name"]) end # close the connection if !rdb.close ecode = rdb.ecode STDERR.printf("close error: %s\n", rdb.errmsg(ecode)) end
Copyright (C) 2006-2010 FAL Labs All rights reserved.
Tokyo Tyrant is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License or any later version. Tokyo Tyrant is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with Tokyo Tyrant; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.