Symfoware

Symfowareについての考察blog

MongoDBにインデックスを作成する

MongoDBに郵便番号と住所のデータを登録しました。

MongoDBに一括でデータを登録する(Bulk Inserts)


郵便番号をキーに住所を検索してみます。



住所検索プログラム



郵便番号が0591615のデータを検索して見ます。


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import Connection
from pymongo.objectid import ObjectId
import time

t1 = time.time()

#コネクション作成
con = Connection('192.168.1.245', 27017)

#コネクションからtestデータベースを取得
db = con.test

#testデータベースからyubinコレクションを取得
col = db.yubin

for data in col.find({u'zip_code': u'0591615'}):
    print data['address']

con.disconnect()

print time.time() - t1, 'sec'




実行してみると・・・


c:\>python sample.py
北海道勇払郡厚真町高丘
0.253999948502 sec

c:\>python sample.py
北海道勇払郡厚真町高丘
0.305000066757 sec

c:\>python sample.py
北海道勇払郡厚真町高丘
0.205999851227 sec



12万件のデータ検索に0.25秒とそれなりに高速なのですが、Indexをつけて
さらに高速にしてみます。



Indexの付与



zip_codeに対してIndexを作成します。


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import Connection
from pymongo import ASCENDING, DESCENDING

#コネクション作成
con = Connection('192.168.1.245', 27017)

#コネクションからtestデータベースを取得
db = con.test

#testデータベースからyubinコレクションを取得
col = db.yubin

col.create_index([("zip_code", ASCENDING)])

con.disconnect()




この後、同じ検索プログラムを実行すると・・・



c:\>python sample.py
北海道勇払郡厚真町高丘
0.0139999389648 sec

c:\>python sample.py
北海道勇払郡厚真町高丘
0.0130000114441 sec

c:\>python sample.py
北海道勇払郡厚真町高丘
0.0130000114441 sec



0.01秒まで縮まりました
すばらしい。



関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2010/01/31(日) 12:14:40|
  2. MongoDB
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<MongoDBに登録した住所を検索する | ホーム | MongoDBに一括でデータを登録する(Bulk Inserts)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/304-6b055bef
この記事にトラックバックする(FC2ブログユーザー)