CSVファイルとSQLite、どっちの方が速い? Djangoの話
そろそろDjango飽きてきた。
CSVファイルをJSONで配るだけの簡単なDjangoアプリ作ってます。
ある程度出来たんだけど、実際に動かすとサクサクしてないので、DB使えば速くなるんじゃないかと素人考えで、SQLite使って実装しました。
CSVバージョン
ファイル開いて、スプリットしてList詰め直してjsonにするだけ
from django.utils import simplejson as json file = open(makeFilePath(DATA_PATH, file_name), 'r') res = file.readlines() resArr = [] for i in res: x = i.split(',') resArr.append([str(x[0]),str(x[1]),str(x[2]),str(x[3]),str(x[4][:-1])]) json.dumps(arrArr, indent=2, ensure_ascii=False)
SQLiteバージョン
CsvDataというモデルを作成。CSVデータを1行を1エントリにして登録したデータをシリアライザー使ってJSONで吐き出す。
from django.core import serializers data = serializers.serialize("json", CsvData.objects.all(), ensure_ascii=False,)
結果
- CSV直読み
Requests per second: 63.59 [#/sec] (mean)
Time per request: 15.725 [ms] (mean)
Requests per second: 8.82 [#/sec] (mean)
Time per request: 113.354 [ms] (mean)
残念過ぎる結果になりました。思わず叫んでしまった。
モデルに登録する部分とか、テストコードとか意外と書いたのに!smb経由でsqlite使えなくてネットさ迷った結果がこれかよ!と、悲しい気持ちになりました。
悪あがき
あまりにも悲しかったので、memcache使ってみました。
ubuntu9.04使ってたのでさくっとmemcachedとpython-memcache入れました。apt-get最高ですね。
settings.pyに一行追加
CACHE_BACKEND = 'memcached://127.0.0.1:11211'
memcachedを起動させる
memcached -m 64 -p 11211
views.pyをちょこっと修正
from django.core.cache import cache def result_test(request): if cache.get('hoge_json'): return HttpResponse(cache.get('hoge_json')) else: res = makeJsonFromDB() return HttpResponse(res)
DBからjson作った後に一行追加
cache.set('hoge_json', res, 10)
コマンド2つと5行追加しただけで、memcache使えるなんてDjangoはとても便利ですね。