PostgreSQLの魅力_エンジニア勉強会20130702

1,010 views

Published on

7月2日に開催されたエスキュービズム社内勉強会資料です。

  • Be the first to comment

PostgreSQLの魅力_エンジニア勉強会20130702

  1. 1. PostgreSQLの魅力
  2. 2. 魅力 • 豊富な型 – 無限長の文字列型 – 日付型 • 3日前とか柔軟 – 配列型 – key-value – 緯度経度型 • 高速なJOIN – 大きなデータの場合、 nested loopしかない MySQLより断然高速 • WALによる堅牢性 – 追記型アーキテクチャ • スケーラビリティ – 64coreとかまでスケー ル • レプリケーション • Window関数 • 容易な拡張 etc etc etc ...
  3. 3. 配列型 CREATE TABLE items( key text, items text[] ); INSERT INTO items VALUES (1, ['a', 'b']) INSERT INTO items VALUES (2, ['c', 'd']) • 集約関数 array_agg SELECT array_agg(key) FROM items --> [1, 2] 2行だったのが1カラムに! -> 行数が少なければ高速 になる
  4. 4. key-value型 (hstore) CREATE TABLE products ( id serial PRIMARY KEY, name varchar, attributes hstore ); • 挿入 INSERT INTO products (name, attributes) VALUES ( 'Geek Love: A Novel', 'author => "Katherine Dunn", pages => 368, category => fiction' ); • 検索 SELECT name FROM products WHERE attributes->'category' = 'fiction';
  5. 5. 緯度経度型(地理データ型) create table landmark( name text, point point ); insert into landmark( name, point )values( '渋谷区役所', point(35.6640352,139.69 82122) ); • 検索 – 矩形内か – 円の中か – 多角形の中か – 長さ – 点の数 などなどで検索可能 PostGISでさらに正確にも
  6. 6. JSON型 SELECT '{"username":"john","posts":121,"email":"john@nowhere.com"}'::json; json ------------------------------------------------------------------- {"username":"john","posts":121,"email":"john@nowhere.com"} • SELECT * from json_each('{"a":"foo", "b":"bar"}'::json) key | value -----+------- a | "foo" b | "bar" JSON型に 変換
  7. 7. plv8 • Googleのv8エンジンをPostgreSQLから使え る – 関数をJavaScriptで定義している例 CREATE OR REPLACE FUNCTION plv8_test(keys text[], vals text[]) RETURNS text AS $$ var o = {}; for(var i=0; i<keys.length; i++){ o[keys[i]] = vals[i]; } return JSON.stringify(o); $$ LANGUAGE plv8 IMMUTABLE STRICT;
  8. 8. 豊富な拡張 • PostGIS • plv8 • POSTPIC – 画像の変換とか • DBLINK – 別DBと接続 • インストールも簡単 – CREATE EXTENSION • FDW – なんにでも接続できる – mysql – redis – CSVファイル – www – s3
  9. 9. FDWの例: redis-FDW • redisをPostgreSQLから直接扱える # SELECT * from redis_db0 limit 5; key | value -----------+------- user_40 | 44 user_41 | 32 user_42 | 11 user_43 | 3 user_80 | 7 – ここからさらにPostgreSQLのDBとのJOINも可能 • 9.2までは読み込みだけだったけど、9.3から書き込みも 可能に
  10. 10. まとめ • PostgreSQLの魅力を語りました – 高速、堅牢、スケール可能 – 豊富な型 – 豊富な拡張

×