Class: Rufus::Edo::Table

Inherits:
Object
  • Object
show all
Includes:
TableCore, Tokyo::CabinetConfig
Defined in:
lib/rufus/edo/cabinet/table.rb

Overview

Rufus::Edo::Table wraps Hirabayashi-san's Ruby bindings for Tokyo Cabinet tables.

This class has the exact same methods as Rufus::Tokyo::Table. It's faster though. The advantage of Rufus::Tokyo::Table lies in that in runs on Ruby 1.8, 1.9 and JRuby.

You need to have Hirabayashi-san's binding installed to use this Rufus::Edo::Table :

http://github.com/jmettraux/rufus-tokyo/tree/master/lib/rufus/edo

Example usage :

require 'rufus/edo'
db = Rufus::Edo::Table.new('data.tct')
db['customer1'] = { 'name' => 'Taira no Kyomori', 'age' => '55' }
# ...
db.close

Constant Summary

Constants included from TableCore

Rufus::Edo::TableCore::INDEX_TYPES

Instance Attribute Summary

Attributes included from Tokyo::HashMethods

#default_proc

Instance Method Summary collapse

Methods included from TableCore

#[]=, #clear, #close, #delete, #delete_keys_with_prefix, #difference, #generate_unique_id, included, #intersection, #keys, #lget, #original, #prepare_query, #query, #query_count, #query_delete, #search, #set_index, #size, #tranabort, #tranbegin, #trancommit, #union

Methods included from Tokyo::Transactions

#abort, #transaction

Methods included from Tokyo::HashMethods

#[], #default, #default=, #each, #merge, #merge!, #to_a, #to_h, #values

Constructor Details

#initialize(path, params = {}) ⇒ Table

Initializes and open a table.

db = Rufus::Edo::Table.new('data.tct')

# or

db = Rufus::Edo::Table.new('data', :type => :table)

# or

db = Rufus::Edo::Table.new('data')

parameters

There are two ways to pass parameters at the opening of a db :

db = Rufus::Edo::Table.new('data.tct#opts=ld#mode=w') # or
db = Rufus::Edo::Table.new('data.tct', :opts => 'ld', :mode => 'w')

mode

* :mode    a set of chars ('r'ead, 'w'rite, 'c'reate, 't'runcate,
           'e' non locking, 'f' non blocking lock), default is 'wc'

other parameters

* :opts    a set of chars ('l'arge, 'd'eflate, 'b'zip2, 't'cbs)
           (usually empty or something like 'ld' or 'lb')

* :bnum    number of elements of the bucket array
* :apow    size of record alignment by power of 2 (defaults to 4)
* :fpow    maximum number of elements of the free block pool by
           power of 2 (defaults to 10)

* :rcnum   specifies the maximum number of records to be cached.
           If it is not more than 0, the record cache is disabled.
           It is disabled by default.
* :lcnum   specifies the maximum number of leaf nodes to be cached.
           If it is not more than 0, the default value is specified.
           The default value is 2048.
* :ncnum   specifies the maximum number of non-leaf nodes to be
           cached. If it is not more than 0, the default value is
           specified. The default value is 512.

* :dfunit  unit step number. If it is not more than 0,
           the auto defragmentation is disabled. (Since TC 1.4.21)

NOTE :

On reopening a file, Cabinet will tend to stick to the parameters as set when the file was opened. To change that, have a look at the man pages of the various command line tools coming with Tokyo Cabinet.



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/rufus/edo/cabinet/table.rb', line 110

def initialize (path, params={})

  conf = determine_conf(path, params, :table)

  @db = TokyoCabinet::TDB.new

  #
  # tune

  @db.tune(conf[:bnum], conf[:apow], conf[:fpow], conf[:opts])

  #
  # set cache

  @db.setcache(conf[:rcnum], conf[:lcnum], conf[:ncnum])

  #
  # set xmsiz

  @db.setxmsiz(conf[:xmsiz])

  #
  # set dfunit (TC > 1.4.21)

  @db.setdfunit(conf[:dfunit]) if @db.respond_to?(:setdfunit)

  #
  # no default

  @default_proc = nil

  #
  # open

  @path = conf[:path]

  @db.open(@path, conf[:mode]) || raise_error
end

Instance Method Details

#pathObject

Returns the path to this table.



151
152
153
154
# File 'lib/rufus/edo/cabinet/table.rb', line 151

def path

  @path
end