My blog

Add intelligent tagline here

[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に)

あとは「システム管理」->「エージェント管理」->「グループ管理」でグループを作っておくとあとで便利かもしれません。

エージェントのインストール

ただ、起動スクリプトにバグがあり このパッチ がないと立ち上がりませんでした。

なお、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の情報が出てくると思います。