パーソナルツール
現在の場所: ホーム takalog rdb で odb な RelStorage を使ってみる
書いた本
Plone 完全活用ガイド の Chapter 1, 2, 3, 11 を執筆しました。
plone のインストール、使い方から、機能・デザインのカスタマイズ、プロダクトの作り方まで、 plone のすべてがぎゅっと詰まっている書籍になっていると思います。
plone に興味がある人から、すでに使いこなしている方まで、ぜひ読んでみてください。
Plone 完全活用ガイドのサポートページ
« 2012May »
Su Mo Tu We Th Fr Sa
    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    
このBlogについて
鈴木たかのりです。とりあえず日記っぽく雑多なことを書き込んでいこうと思っています。 zope/plone関係の技術的な内容については http://takanory.net の方にまとめていこうと思います。 コメント・ツッコミはご自由にどうぞ。
twitter facebook linkedin foursquare
カテゴリ
android (16)
av (27)
books (35)
coreblog (49)
ds (22)
emacs (8)
ferret (24)
google (34)
icecream (44)
lego (70)
mac (22)
misc (74)
moblog (277)
movie (33)
pc (44)
plone (338)
puzzle (42)
python (57)
server (67)
snowscoot (9)
software (125)
sports (32)
suidou (30)
winds (47)
 
文書操作

rdb で odb な RelStorage を使ってみる

作成者 takanori投稿日 2010年12月10日 23時59分 最終変更日時 2010年12月11日 12時48分
  • 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 さんにお願いします!!

カテゴリ
lego lego
plone plone
トラックバック用URL:
http://takanory.net/takalog/1254/tbping
コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)
Enter the word

Powered by vine linux, python, zope, plone, coreblog