image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 2008年12月30日 | トップページ | 2009年1月1日 »

2008年12月31日

2008-12-31

郵便番号を tokyo-tyrant にいれてみた

郵便番号を tokyo-tyrant にいれてみた

郵便番号データをそのまま tokyo-tyrant にいれ、取り出してみた。
次の順でコードを示そう。
1. 郵便番号の格納 (ruby で)
2. ruby, jruby で 値をとりだす。

1. 郵便番号の格納 (ruby で)
=====================
   - http://www.tuyudaku.net/sqlite/import.html
  > SQLite - CSVファイルのインポート
を参考にして utf8 にした csv ファイルを取り出す。
そのあと、 ruby で行単位に tokyo-tyrant に登録する

$ cat tt-zip.rb
Start server:
#   sudo /usr/local/sbin/ttserver start

$KCODE = 'utf8'

require 'rubygems'
require 'fastercsv'
require 'pp'

require 'tokyotyrant'
include TokyoTyrant

# create the object
rdb = RDB::new

# connect to the server
if !rdb.open("127.0.0.1", 1978)
  ecode = rdb.ecode
  STDERR.printf("open error: %s\n", rdb.errmsg(ecode))
end

CSV_FILE = 'zipcode.csv'
FasterCSV.foreach(CSV_FILE) do |row|
  r = rdb.put(row[2], row * ',')
  if !r
    ecode = rdb.ecode
    STDERR.printf("put error: %s\n", rdb.errmsg(ecode))
  end
end

# close the connection
if !rdb.close
  ecode = rdb.ecode
  STDERR.printf("close error: %s\n", rdb.errmsg(ecode))
end

2. ruby, jruby で 値をとりだす。
======================
$ cat query-zip.rb

# Start server:
#   sudo /usr/local/sbin/ttserver start // サーバー起動
#   ruby tt-zip.ruby  // データ登録 (一度だけ実行すれば良い)
#
# ruby quert-zip 1000000   // 郵便番号 1000000 のデータ
# ruby quert-zip 100000.   // 正規表現での検索

$KCODE = 'utf8'

require 'rubygems'

require 'tokyotyrant'
include TokyoTyrant

# key 集合を得る。(得た情報は DB に保存して再利用する)
def get_keys rdb
  if rdb["_keys"] != nil
    keys = YAML::load(rdb["_keys"])
  else
    keys = []

    rdb.iterinit
    while key = rdb.iternext
      keys << key
    end
    rdb["_keys"] = keys.to_yaml
  end

  keys
end

# key 集合の項目を削除する
def clear_keys rdb
  rdb.out("_keys")
end

# create the object
rdb = RDB::new

# connect to the server
if !rdb.open("127.0.0.1", 1978)
  ecode = rdb.ecode
  STDERR.printf("open error: %s\n", rdb.errmsg(ecode))
end

# hash-like usage
key = ARGV[0]

if rdb[key] != nil
  puts rdb[key]
else
  # 指定された番号のデータがなければ、正規表現に解釈して検索する
  keys = get_keys(rdb)
  r = Regexp.new(ARGV[0])
  keys.each do |k|
    puts "#{k}:#{rdb[k]}\n" if r =~ k
  end
end

# close the connection
if !rdb.close
  ecode = rdb.ecode
  STDERR.printf("close error: %s\n", rdb.errmsg(ecode))
end

$ time ruby query-zip.rb  1000000
13101,100  ,1000000,トウキョウト,チヨダク,イカニケイサイガナイバアイ,東京都,千代田区,以下に掲載がない場合,0,0,0,0,0,0

real    0m0.058s
user    0m0.039s
sys    0m0.017s

$ time jruby query-zip.rb  1000000
13101,100  ,1000000,トウキョウト,チヨダク,イカニケイサイガナイバアイ,東京都,千代田区,以下に掲載がない場合,0,0,0,0,0,0

real    0m1.291s
user    0m1.123s
sys    0m0.125s

指定した key に相当する データがみつからなかった場合は、key を 正規表現として解釈して、検索するようにも作ってある。

$ time ruby query-zip.rb  111111
3111111:08201,31111,3111111,イバラキケン,ミトシ,コイズミチョウ,茨城県,水戸市,小泉町,0,0,0,0,0,0
5111111:24205,51111,5111111,ミエケン,クワナシ,ナガシマチョウコジマ,三重県,桑名市,長島町小島,0,0,0,0,0,0
8111111:40137,81111,8111111,フクオカケン,フクオカシサワラク,ワキヤマ,福岡県,福岡市早良区,脇山,0,0,1,0,0,0

$ time ruby query-zip.rb  100000[1-2]
1000002:13101,100  ,1000002,トウキョウト,チヨダク,コウキョガイエン,東京都,千代田区,皇居外苑,0,0,0,0,0,0
1000001:13101,100  ,1000001,トウキョウト,チヨダク,チヨダ,東京都,千代田区,千代田,0,0,0,0,0,0

real    0m0.453s
user    0m0.397s
sys    0m0.035s

# tokyo-tyrant には、リカバリー/レプリケーション機能もある。
#  - http://alpha.mixi.co.jp/blog/?p=147
#  > mixi Engineers’ Blog » Tokyo TyrantによるHAハッシュDBサーバの構築

イントラネットでの高速なデータベース処理には、memcachedb や tokyo-tyrant は十分に使えそうだ。

ATOK プラグインのバックで走らせる DB としても 十分に 利用できそうだ。

« 2008年12月30日 | トップページ | 2009年1月1日 »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク