rdb で odb な RelStorage を使ってみる
- Authors:
- Publisher: レゴ
- ISBN:
- Amazon Price: ¥ 4,800
- Authors:
- Publisher: レゴ
- ISBN:
- Amazon Price: ¥ 6,800
Python Web フレームワーク アドベントカレンダー2010 の10日目です。(あと40分)
アドベントカレンダーとは、そもそもクリスマスに向けてのアドベント期間(多分12月1日~25日)に、カレンダーについているポケット部分を毎日空けて、おもちゃとかオーナメント(ツリーの飾り)を毎日取り出して、クリスマススの準備を楽しむといったものです。
レゴでは毎年アドベントカレンダーのセットが発売されており、今年は以下の2セットが出ています。
どちらも1日に一つずつ小窓を開けると小さなレゴのセットがでてきるという、ともて楽しいセットです。
シティ アドベントカレンダーは小さなおもちゃを模したモデルがあるのが素敵ですね。サンタさんが2体(1対は裸ですが)や犬と猫が手に入るのが魅力です。
キングダム アドベントカレンダーは武器が色々手に入るのが魅力的なセットです。リンゴやカエルのパーツもありますし、なんといっても新パーツの ブタ があるのが魅力です。多分、現時点では一番安くブタが手に入るセットではないでしょうか。
以上、アドベントカレンダーの紹介でした。
いいわけ
えっと、 Isoparametric さんの パス を @shibukawa が 華麗にスルーパス して 私のところに 急にボールが来たので シュートを失敗するかも知れませんが、それは私が悪いんじゃなくて急にボールがくることですから!! 今日は 12月10日 Sphinx-Users.jp総会(東京都) なのにっ!!
と、ひとしきりいいわけをしたので本題に入ります。
本題
私がこのサイトでも使っている Plone は Zope というアプリケーションサーバーの上で動いています。
Zope アプリケーションサーバーは一般的?なアプリケーションサーバーとかWebフレームワークとは違って、データの保存先に MySQL などの RDB ではなく ZODB という Python でかかれた オブジェクトデータベース を使っています。 オブジェクトがそのまま保存できるので便利ですが、他ではあまり使われていないと思うのでちょっと変態だと思います。
この ZODB は普通は Data.fs という単一のファイルに実際のデータ(基本的にはオブジェクトを pickle したもの?)を保存しています。しかし最近 ZODB のデータの保存先として RDB を使用するという、さらに変態な仕組みがでてきて、なかなか有力な仕組みとしてそっち方面では注目されているそうです。
というわけで、このエントリではそんな縁の下の力持ちプロダクト RelStorage を紹介したいと思います。
ちなみにこの RelStorage については今年10月末にイギリスで開催された Plone Conference 2010 ではじめて知りました。(といってもそのセッションを聞いたのは寺田さんですが)
そんな興味深い Plone Conference 2010 のレポートを Plone Conference 2010参加レポート|gihyo.jp で公開しているので是非呼んでみてください。(宣伝)
RelStorage のインストール
では、 RelStolage をインストールして Plone のストレージとして使用します。
基本的な手順は Python Package Index : RelStorage 1.4.1 に書いてあるものを参考にしました。
MySQL セットアップ
最初に MySQL に RelStorage 用のデータベース領域やユーザを作成します。手順は以下の通りです。
PostgreSQL や Orqacle の場合はさっきのページを見てください。
% sudo /etc/init.d/mysql start % mysql -u root -p mysql> CREATE USER 'zodbuser'@'localhost' IDENTIFIED BY 'zodbuser'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE DATABASE zodb; Query OK, 1 row affected (0.02 sec) mysql> GRANT ALL ON zodb.* TO 'zodbuser'@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
Plone インストール
次に Plone 4 をストレージに RelStorage を使うように設定してインストールします。
ポイントは buildout.cfg の eggs に RelStorage を入れることと、 instance でデータベースの設定(データベース名、ユーザ名、パスワード等)を設定することです。
あとは普通に bin/buildout を実行して、 bin/instance fg で起動します。
% sudo easy_install ZopeSkel
% zopeskel plone3_buildout
Enter project name: plone4_relstorage
:
Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']:
Plone Version (Plone version # to install) ['3.3.5']: 4.0.2
Zope2 Install Path (Path to Zope2 installation; leave blank to fetch one!) ['']:
Plone Products Directory (Path to Plone products; leave blank to fetch [Plone 3.0/3.1 only]) ['']:
Initial Zope Username (Username for Zope root admin user) ['admin']:
Initial User Password (Password for Zope root admin user) ['']: admin
HTTP Port (Port that Zope will use for serving HTTP) ['8080']: 8380
Debug Mode (Should debug mode be "on" or "off"?) ['off']:
Verbose Security? (Should verbose security be "on" or "off"?) ['off']:
Creating directory ./plone4_relstorage
:
% cd plone4_relstorage
% ls
README.txt bootstrap.py buildout.cfg products/ src/ var/
% cp buildout.cfg.org
% vi buildout.cfg
% diff -c buildout.cfg buildout.cfg.org
*** buildout.cfg 2010-12-10 11:35:21.000000000 +0900
--- buildout.cfg.org 2010-12-10 11:31:54.000000000 +0900
***************
*** 19,26 ****
# Add additional eggs here
eggs =
- RelStorage
- MySQL-python
# Reference any eggs you are developing here, one per line
# e.g.: develop = src/my.package
--- 19,24 ----
***************
*** 55,65 ****
#debug-mode = on
#verbose-security = on
blob-storage = var/blobstorage
- rel-storage =
- type mysql
- db zodb
- user zodbuser
- passwd zodbuser
# If you want Zope to know about any additional eggs, list them here.
# This should include any development eggs you listed in develop-eggs above,
# e.g. eggs = Plone my.package
--- 53,58 ----
% python2.6 bootstrap.py
% bin/buildout
:
Generated script '/var/lib/plone4_relstorage/bin/instance'.
Unused options for instance: 'blob-storage'.
Installing zopepy.
Generated interpreter '/var/lib/plone4_relstorage/bin/zopepy'.
% bin/instance fg
2010-12-10 12:19:02 INFO ZServer HTTP server started at Fri Dec 10 12:19:02 2010
Hostname: 0.0.0.0
Port: 8380
2010-12-10 12:19:19 INFO Zope Ready to handle requests
DB をチェック
サーバが立ち上がった状態段階でデータベースの中身を見てみます。
10個のテーブルができていて、このテーブルを使うようです。
% mysql -u zodbuser -p Enter password: mysql> use zodb mysql> show tables; +-------------------+ | Tables_in_zodb | +-------------------+ | blob_chunk | | current_object | | new_oid | | object_ref | | object_refs_added | | object_state | | pack_object | | pack_state | | pack_state_tid | | transaction | +-------------------+
このあとは、どこにどんなデータが入るのか解析しようと思っていたんですが、もう時間がたりないのでこれで終わりにします。
すいません。
次は Python 忘年会 でデータの持ち方について熱く語っていた @pokarim さんにお願いします!!
-
- ¦
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
- トラックバック用URL:
- http://takanory.net/takalog/1254/tbping
鈴木たかのりです。とりあえず日記っぽく雑多なことを書き込んでいこうと思っています。
zope/plone関係の技術的な内容については

