Browse files

Created gemspec and README

  • Loading branch information...
Makoto Inoue
Makoto Inoue committed Nov 15, 2008
1 parent 13e0df9 commit cae703dff98d303fd2467c4e789e226c78c16876
@@ -0,0 +1 @@
@@ -1,8 +1,37 @@
-An experimentation to add ORM on top of Tokyo Cabinet
-WARNING::: This is not ready, so I haven't created gems yet.
+An experimentation to add ORM on top of Tokyo Cabinet
+What Is Tokyo Cabinet?
+- Modern implementation of DBM(key/value hash style(HDB), but supports fixed length hash(FDB), and b tree(BDB))
+- High concurrency/ high scalability (developed by a developer at Mixi, Japanese version of Facebook)
+- More detail at
+How dm-tokyo-cabinet-adapter stores data into Tokyo Cabinet.
+- Each object is stored as "ObjName.bdb" file: object id as key and entire data marshalled as value
+- Each attribute is stored as "ObjNameAttribute.bdb" file: attribute name as key and reference object id as value
+- The above architecture can also be considerd "ObjeName.bdb" as table and "ObjNameAttribute.bdb" as indexes for each attributes.
+- Currently implements basic CRUD, association, and eql finder.
+Motivation behind the development.
+- To experiment what you can do with basic hash based database.
+ Interesting post at
+- To learn internal of DataMapper and how to implement ORM/adapter
+How to install (Work in progress)
+1. Install Tokyo Cabinet
+2. Install Ruby Binding
+3. Install dm-tokyo-cabinet-adapter
+3.1 download dm-tokyo-cabinet-adapter
+3.2 cd to the dir
+3.3 gem build dm-tokyo-cabinet-adapter.gemspec
+3.4 gem install dm-tokyo-cabinet-adapter-0.0.1.gem
+4. Set data dir
+5. Setup DataMapper.setup
+Further research topics/TODO
+- Performance benchmarking.
+- At this moment, it's only uses B tree, as it covers the wide range of functionality (range search, duplicate values, transaction support, and so on). Consider replacing part to HDB or FDB for compact storage and speed.
- Are there any ways to retrieve first/last key on FDB/HDB?
-- Can TC support "not equal" operation?
+- Can TC support "not equal" operation?
@@ -0,0 +1,19 @@ do |s|
+ = %q{dm-tokyo-cabinet-adapter}
+ s.version = "0.0.1"
+ s.required_rubygems_version =">= 0") if s.respond_to? :required_rubygems_version=
+ s.authors = ["Makoto Inoue"]
+ = %q{2008-11-15}
+ s.description = %q{A DataMapper adapter for Tokyo Cabinet}
+ = %q{}
+ s.files = ["lib/tc_adapter.rb", "README", "Rakefile", "dm-tokyo-cabinet-adapter.gemspec", "spec/tc_adapter_spec.rb", "spec/spec_helper.rb"]
+ s.homepage = %q{}
+ s.require_paths = ["lib"]
+ s.rubygems_version = %q{1.2.0}
+ s.summary = %q{A DatMapper adapter for Tokyo Cabinet}
+ s.test_files = ["spec/tc_adapter_spec.rb", "spec/spec_helper.rb"]
+require 'dm-core'
+require 'tokyocabinet'
@@ -2,7 +2,6 @@
require 'dm-core'
require 'tokyocabinet'
include TokyoCabinet
-require 'ruby-debug'
module DataMapper
module Adapters
@@ -1,5 +1,4 @@
require 'rubygems'
require 'pathname'
require Pathname(__FILE__).dirname.parent.expand_path + 'lib/tc_adapter'
File renamed without changes.

0 comments on commit cae703d

Please sign in to comment.