[postgresql]PostgreSQL hstoreでKVS
それPostgreSQLでできるよ、第二弾。
PostgreSQLにはhstoreという拡張があります。
これはkeyとvalueの対の集合を単一のレコードに格納することが出来るものです。 つまり、Key-Value-Storeですね。 これを使うと通常のテーブルのようにキーを事前に定義しておく必要がありません。
hstoreについては以下の資料をみてください。特に後者は今回書いていない、いろいろな演算子・関数を紹介していますのですごく参考になります。
そして、今回の記事はherokuのこの記事を元にしています。
herokuはpostgresユーザなんですよ。
hstoreを入れる
hstoreはcontribに入っています。今回はFreeBSDを使用したので、以下のように入れます。
% sudo portinstall databases/postgresql91-contrib
続いてDBにhstoreを入れます。9.1から簡単に拡張を入れられるようになりました。
% psql test -c "CREATE EXTENSION hstore;"
さて、これでhstoreを使う準備は出来ました。
hstoreのテーブルを定義
さっき定義する必要ないって言ってたじゃん、という声もありますが、hstoreという部分だけは定義する必要があります。 といっても、hstoreの中身を定義する必要はありません。
CREATE TABLE products (
id serial PRIMARY KEY,
name varchar,
attributes hstore
);
今回はこうしてみました。herokuのblogのとおりですね。
データを入れる
INSERT INTO products (name, attributes) VALUES (
'Geek Love: A Novel',
'author => "Katherine Dunn",
pages => 368,
category => fiction'
);
データを入れるには key => value という構文を使 います。文字列は”で囲むと空白、=、>という記号も入れられます。
検索する
SELECT name as device
FROM products
WHERE attributes->'category' = 'fiction'
検索時はkeyを -> で指定します。
また、”?”を使うことで続く値がキーとしてあれば、という意味になります。
SELECT name, attributes->'pages'
FROM products
WHERE attributes ? 'pages'
その他
indexも作れます。
CREATE INDEX product_manufacturer
ON products ((products.attributes->'manufacturer'));
ただ、汎用転置インデックスのGINを使ったほうがいいという話もあります。
joinもできます。
SELECT manufacturers.country, products.name
FROM products, manufacturers
WHERE products.attributes -> 'manufacturer' = manufacturers.name;
今日はここまで
というわけで、PostgreSQLを使うと、こういう便利なことができるよ、という紹介でした。
次のネタに続く…
[pandorafms]Pandora FMSを使ってみた
サーバ監視にはnagiosが主流で、最近ではzabbixか、という感じかと思っていましたが、Software Design 2012年3月号で楽天がPandora FMSを使っていると紹介されていました。というわけで、試してみました。
Pandora FMS
Pandora FMS はオープンソース(GPL)の監視ツールです。
個人的にいいなと思った特徴は
- Webインタフェースが綺麗
- 日本語化されてる
- agentのインストールが簡単、かつどんなユーザでも実行できる
- 単体で監視、グラフ表示が行える
- nagios pluginも使える
- 外部APIがある(putもgetも可能)
というところです。
インストール
rpmとかいろいろあるのですが、 ここ から VMWare 用のイメージを取ってくるのがお試しには一番簡単です。
ただし、直ぐにパスワードは変えましょう。初期は id: admin, pass: pandoraです。
サーバの設定
まず必要なことはタイムゾーンの設定です。
- OSのtimezone設定
- Pandoraの言語の設定
- Pandoraのtimezoneの設定 (Asia/Tokyoに)
あとは「システム管理」->「エージェント管理」->「グループ管理」でグループを作っておくとあとで便利かもしれません。
エージェントのインストール
- [http://sourceforge.net/projects/pandora/files/Pandora%20FMS%204.0.1/Tarball/:title=ここ] からtar.gzを取ってきます。
- 展開します
- cd unix
- sudo ./pandora_agent_installer –install
- 任意の場所に入れる場合: sudo ./pandora_agent_installer –install /path/to/somewhere
ただ、起動スクリプトにバグがあり このパッチ がないと立ち上がりませんでした。
なお、agentの中身はperlスクリプトですので、基本的にまるごとコピーで動きます。 perlもかなり依存性がないように作られてるので、多くの場合はそのまま動くのではないでしょうか
エージェントの設定
/path/to/somewhere/etc/pandora_agent.conf をいじります。と言ってもお試しであれば
- server_ip 192.168.0.10
を変更するだけでいいのではないでしょうか。必要であれば
- autotime 1
を加えて、agentではなくサーバ側のtimezoneをみるようにするといいかもしれません。
これで
% sudo /etc/init.d/pandora_daemon start
とすれば、pandora agentが立ち上がり、自動的にserverにデータを送るようになります。数秒待てばserver側にagentの情報が出てくると思います。