Python
Redis
More than 3 years have passed since last update.

この記事はPython Advent Calendar 2014の6日目です。

romはPython製のRedisオブジェクトマッパーの一つで、よくあるオブジェクトリレーショナルマッパー(ORM)のパターンに非常に似たものになっています。


機能


  1. モデルを定義します

  2. クエリでとってきます

なんかどこかでみたことありますね。


モデルの定義

このようにしてモデルを定義します。

import rom

# All models to be handled by rom must derived from rom.Model
class User(rom.Model):
email = rom.String(required=True, unique=True, suffix=True)
salt = rom.String()
hash = rom.String()
created_at = rom.Float(default=time.time)

なんかどこかでみたことありますね。


クエリなど

定義したものはこのように使えます。

user = User(email='user@host.com')

user.salt, user.hash = gen_hash(password)
user.save()

user = User.get_by(email='user@host.com')
at_gmail = User.query.endswith(email='@gmail.com').all()

なんかどこかでみたことありますね。


ほか


  • モデルごとにデータベースを設定できるマルチデータベース

  • romで定義していないモデルへのForeignKey参照フィールド


どんなときに使えるのか


  • Redisが使える開発環境であり(必須) 、リレーショナルデータベースだとレイテンシが気になるとき

  • Redis上で単純なデータ構造以上のものを表現したいとき

  • DjangoのORMっぽいものをRedisバックエンドで使いたいとき


どうやって動いてるの


  • モデルデータはプライマリキーをキーにしたHashに入っています

  • モデルデータを検索可能にするためにSetやSortedSetに射影しています