SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
Do Postgres dream of
Graph-Database?
ぬこ@横浜 (@nuko_yokohama)
OSC 島根 2016 バージョン
2
自己紹介
「 PostgreSQL ラーメン」
でググってください。
3
日本 PostgreSQL ユーザ会の
自称ゆる枠担当やってる
PostgreSQL おじさんです。
4
今日話すこと
PostgreSQL と
グラフデータベースの
話をしようじゃないか
5
DBMS の話とか
地味ですまんな
でも、意外と面白いことが
できたりするんですよ。
6
Question.
PostgreSQL を
使ったことある人
グラフデータベースを
知ってる人
7
グラフ
データベース?
8
グラフデータベース
データを「ノード」と「関連」で管理するの NoSQL の一種。
ノード間を接続することでノード間の関連を表現する。
ノードのトラバースが容易に可能。
ぬこの主食の割合
ご飯
ラーメン
うどん
そば
パン
2010 年 2011 年 2012 年 2013 年 2014 年 2015 年 2016 年
0
50
100
150
200
250
300
350
ぬこの年間ラー食回数
回数
まちがい せいかい
醤油 味噌 豚骨醤油 担々麺 塩 カレー その他
0
200
400
600
800
1000
1200
地域 / 種別毎の分類
神奈川
東京
その他
種別
回数
ノード
関連
9
例えば Neo4j
ノード
関連
https://neo4j.com/
Community Edition と Enterprise Edition があります。
例えば Neo4j
10
PostgreSQL から
グラフデータを扱ってみよう
PostgreSQL の更新を Neo4j へ反映
PostgreSQL から SQL で Neo4j を検索
11
PostgreSQL の
更新を
Neo4j へ反映
12
Neo4j Server
Logideco4neo4j
PostgreSQL
Relational Model
Cypher Query
WAL
(wal_level=logical) Logical
Replication
Slot
Execute Cypher Query on REST
Convert Cypher Query
PostgreSQL
WAL to Neo4j
Graph Model
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Get Replication Slot Data
Decoding Function
Convert JSON
スロット定義
13
Neo4j Server
Logideco4neo4j
PostgreSQL
Relational Model
Cypher Query
WAL
(wal_level=logical) Logical
Replication
Slot
Execute Cypher Query on REST
Convert Cypher Query
PostgreSQL
WAL to Neo4j
Graph Model
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Get Replication Slot Data
Decoding Function
Convert JSON
スロット定義
14
Data Model
Neo4j にマッピングするための
PostgreSQL 上のデータモデル
非常にざっくり言うと、
ノードテーブルと関連テーブルの
2 種のテーブルで構成する。
15
Data Model
ノードテーブル
ノード ID(pk)
ノードプロパティ ( 任意 )
関連テーブル
関連 ID(pk)
起点ノードラベル(種類)
起点ノード ID
関連タイプ (text)
終点ノードラベル(種類)
終点ノード ID
ノードラベルを
テーブル名に
マッピングするのが
良さげ
今回は全ての
関連タイプを
1 テーブルで管理
16
Neo4j Server
Logideco4neo4j
PostgreSQL
Relational Model
Cypher Query
WAL
(wal_level=logical) Logical
Replication
Slot
Execute Cypher Query on REST
Convert Cypher Query
PostgreSQL
WAL to Neo4j
Graph Model
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Get Replication Slot Data
Decoding Function
Convert JSON
スロット定義
17
ロジカル
デコーディング
18
ロジカルデコーディング
PostgreSQL 9.4 から導入された基盤
WAL を任意形式にデコーディングする基盤
デコーディング関数や、
デコードされた更新情報の反映は
利用者が好きに開発できる。
PostgreSQL ロマン機能の一つですね。
19
Decoding Function
ざっくり言うと PostgreSQL の
更新ログ (WAL) を
任意の形式の論理ログに変換する関数。
どういった形式に変換するのかは、
Decoding Function 実装者まかせ。
20
Decoding Function
幸い PostgreSQL のソース内には
Logical Decoding の
サンプルが入っている。
contrib/test_decoding
21
Decoding Function
test_decoding を動作させてみる。
デコードされた更新ログが、
特定の論理スロットに格納される。
SQL 関数を使って、このスロット内の
デコードされた内容を読み取る。
22
Decoding Function
例えば以下のような DML を発行する
BEGIN;
DROP TABLE IF EXISTS node;
CREATE TABLE node
(id int primary key, name text, age int, gender text, location text);
COMMIT;
INSERT INTO node VALUES
(1, 'Akagi',17,'Famale','Tokyo'),
(2, 'Yamato',28,'Male','Tokyo'),
(3, 'Musashi',27,'Male','Yokohama'),
(4, 'Nagato',22,'Male','Kawasaki');
BEGIN;
UPDATE node SET age = age + 1 WHERE id IN (1,2);
DELETE FROM node WHERE id IN (3,4);
SELECT * FROM node;
COMMIT;
23
Decoding Function
論理スロットから SQL 関数経由で更新ログを取得できる
logideco=# SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL,
NULL);
BEGIN 1959
COMMIT 1959
BEGIN 1960
table public.node: INSERT: id[integer]:1 name[text]:'Akagi' age[integer]:17
gender[text]:'Famale' location[text]:'Tokyo'
table public.node: INSERT: id[integer]:2 name[text]:'Yamato' age[integer]:28
gender[text]:'Male' location[text]:'Tokyo'
table public.node: INSERT: id[integer]:3 name[text]:'Musashi' age[integer]:27
gender[text]:'Male' location[text]:'Yokohama'
table public.node: INSERT: id[integer]:4 name[text]:'Nagato' age[integer]:22
gender[text]:'Male' location[text]:'Kawasaki'
COMMIT 1960
BEGIN 1961
table public.node: UPDATE: id[integer]:1 name[text]:'Akagi' age[integer]:18
gender[text]:'Famale' location[text]:'Tokyo'
table public.node: UPDATE: id[integer]:2 name[text]:'Yamato' age[integer]:29
gender[text]:'Male' location[text]:'Tokyo'
table public.node: DELETE: id[integer]:3
table public.node: DELETE: id[integer]:4
COMMIT 1961
test_decoding は
DDL は未対応です。
24
Decoding Function
contrib/test_decoding は、
テキスト形式で出力。
(見やすさ重視。サンプルだし)
でも、更新ログを他の DBMS に
反映するには、不向きかも・・・?
25
Decoding Function
JSON のような汎用形式にしておけば、
デコード結果を処理するのも楽になる。
↓
表現能力は十分
可読性もある程度はある
既存の JSON パーサが使える
既存のパーサが使えるのは
仕様検討も実装も楽!
26
Decoding Function
以下のような情報を含む
JSON データを生成すれば良さげ。
コマンド タグ 更新対象の
スキーマと表
挿入列と値 更新列と
更新後の値
検索キー列
とキー値
INSERT ○ ○ ○ - -
UPDATE ○ ○ - ○ ○
DELETE ○ ○ - - ○
トランザクションを意識するなら、
BEGIN や COMMIT も考慮する必要がある。
もう作っている人は
いそうだが・・・
27
Decoding Function
探したら、やっぱりありましたw
「 PostgreSQL の Logical Decoding 機能についての紹介」
http://qiita.com/bwtakacy/items/d8461518a1770524e0d6
まとめを書いたのは
@bwtakacy さん
pg_rman や pg_bulkload の
メンテナやってる人です。
Deconding Function Plug-in wal2json
https://github.com/eulerto/wal2json
名前のとおり WAL を JSON 形式にデコードしてくれる。
せっかくなので、今回はこれを使ってみる。
28
Decoding Function
json2wal の使用例
例えば以下のような DML を発行する
neo4j=# BEGIN;
BEGIN
neo4j=# INSERT INTO node_person VALUES
('2005','Shinano','Famale','Kawasaki','22');
INSERT 0 1
neo4j=# INSERT INTO rel_person_person VALUES
('10028','2005','love','1001');
INSERT 0 1
neo4j=# UPDATE node_person SET location = 'Yokohama' WHERE uid = '2005';
UPDATE 1
neo4j=# DELETE FROM rel_person_person WHERE rid = '10028';
DELETE 1
neo4j=# DELETE FROM node_person WHERE uid = '2005';
DELETE 1
neo4j=# COMMIT;
COMMIT
29
Decoding Function
json2wal の使用例
レプリケーションスロットから、取得したデコード結果
トランザクション全体で 1 つの JSON 文書になっている
neo4j=# SELECT data FROM pg_logical_slot_get_changes('neo4j', NULL, NULL);
{"xid":1976,"change":[
{"kind":"insert","schema":"public","table":"node_person","columnnames":
["uid","name","gender","location","age"],"columntypes":
["text","text","text","text","text"],"columnvalues":
["2005","Shinano","Famale","Kawasaki","22"]}
,{"kind":"insert","schema":"public","table":"rel_person_person","columnnames":
["rid","f_uid","type","t_uid"],"columntypes":
["text","text","text","text"],"columnvalues":["10028","2005","love","1001"]}
,{"kind":"update","schema":"public","table":"node_person","columnnames":
["uid","name","gender","location","age"],"columntypes":
["text","text","text","text","text"],"columnvalues":
["2005","Shinano","Famale","Yokohama","22"],"oldkeys":{"keynames":["uid"],"keytypes":
["text"],"keyvalues":["2005"]}}
,{"kind":"delete","schema":"public","table":"rel_person_person","oldkeys":{"keynames":
["rid"],"keytypes":["text"],"keyvalues":["10028"]}}
,{"kind":"delete","schema":"public","table":"node_person","oldkeys":{"keynames":
["uid"],"keytypes":["text"],"keyvalues":["2005"]}}
]}
赤字が 1 つの DML によるログ情報
30
Neo4j Server
Logideco4neo4j
PostgreSQL
Relational Model
Cypher Query
WAL
(wal_level=logical) Logical
Replication
Slot
Execute Cypher Query on REST
Convert Cypher Query
PostgreSQL
WAL to Neo4j
Graph Model
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Get Replication Slot Data
Decoding Function
Convert JSON
スロット定義
31
Logideco4neo4j
必要なパーツ
PostgreSQL クライアントライブラリ
JSON パーサ
http クライアントライブラリ
これが揃えば、どんな言語で組んでも OK
今回は C 言語で
組んでみたよ!
32
Logideco4neo4j
Logical Decoding 内容から
Neo4j への反映に必要な処理
レプリケーションスロットへの検索
検索結果から Cypher Query を生成
Cypher Query を REST API で Neo4j へ
これを繰り返す
33
Logideco4neo4j
レプリケーションスロットから
デコードされた WAL を
読み込む SQL 関数を発行する
http://www.postgresql.jp/document/9.5/html/functions-admin.html#functions-replication
関数名 説明
pg_create_logical_replication_slot(slot
_name name, plugin name)
論理レプリケーションスロットを生成
pg_logical_slot_get_changes(slot_nam
e name, upto_lsn pg_lsn,
upto_nchanges int, VARIADIC options
text[])
論理レプリケーションスロットから変更内
容を読み取る。
34
Logideco4neo4j
デコード結果( JSON )を json-c 等の
JSON パーサで解析して
挿入・更新・削除用の
Neo4j Cypher クエリを生成する
35
Logideco4neo4j
ノード挿入の Cypher Query への変換例
INSERT INTO public.person
(nid, name, gender, location, age)
VALUES ('10001',' ぬこ ','Male','Yokohama','48')
{"kind":"insert","schema":"public","table":"person",
"columnnames":["nid","name","gender","location","age"],
"columntypes":["text","text","text","text","text"],
"columnvalues":["10001"," ぬこ ","Male","Yokohama","48"]}
CREATE (n:person { nid:"10001",name:" ぬこ ",gender:"Male",
location:"Yokohama",age:"48" })
{"query":"CREATE (n:person { nid:"10001",name:" ぬこ ",
gender:"Male",location:"Yokohama",age:"48" }) "}
SQL
論理ログ
Cypher
REST API
更新も削除も同様に REST API に変換
36
Logideco4neo4j
関連挿入の Cypher Query への変換例
INSERT INTO relationship VALUES
('100001', 'employ', 'company', '1001', 'person', '10001');
{"kind":"insert","schema":"public","table":"relationship",
"columnnames":["rid","type","f_label","f_uid","t_label","t_uid"],
"columntypes":["text","text","text","text","text","text"],
"columnvalues":["100001","employ","company","1001","person","10001"]}
MATCH (f:company {nid:"1001"}),(t:person {nid:"10001"})
MERGE (f)-[e:employ {rid:"100001"}]->(t)
query={"query":"MATCH (f:company {nid:"1001"}),
(t:person {nid:"10001"})
MERGE (f)-[e:employ {rid:"100001"}]->(t)"}
SQL
論理ログ
Cypher
REST API
更新も削除も同様に REST API に変換
37
Logideco4neo4j
Neo4j Cypher クエリを含む
REST API パラメータを
libcurl などの HTTP ライブラリ経由で
発行すると、後は Neo4j サーバが
よしなにやってくれる。
38
デモ
39
PostgreSQL の更新ログを
Neo4j に適用できた。
やったね♪
40
PostgreSQL から
SQL で
Neo4j を検索
41
Foreign
Data Wrapper
42
PostgreSQL の外部にある
データに対して
標準的な SQL クエリで
アクセスするための
PostgreSQL ロマン機能
43
Neo4j のデータを
SQL で検索するための
Foreign Data Wrapper を
開発しないといけない。
44
Neo4j Server
Logideco4neo4j
PostgreSQL
Cypher Query
WAL
(wal_level=logical) Logical
Replication
Slot
Execute Cypher Query on REST
Convert Cypher Query
olumn1 column2 column3
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
Get Replication Slot Data
Decoding Function
Convert JSON
Neo4j Foriegn Data Wrapper
Defined Cypher Query
Execute Cypher Query on REST
Generate PostgreSQL Record
PostgreSQL
Record
JSON
Result
Provide Cypher Result View
SQL
Cypher
Query
スロット定義
45
というか、
以前 Neo4j に
接続する FDW を
作っていた
https://github.com/nuko-yokohama/neo4j_fdw
46
何故か PostgreSQL Wiki に載ってる・・・
メンテナンスをサボっているので、 PostgreSQL 9.5 以降に対応してません・・・
47
neo4j_fdw
外部データラッパを登録
外部サーバと外部テーブルを定義
CREATE EXTENSION neo4j_fdw;
CREATE SERVER foo
FOREIGN DATA WRAPPER neo4j_fdw
OPTIONS (url 'http://localhost:7474/db/data/cypher');
CREATE FOREIGN TABLE persons (
uid text, name text, gender text, age text, company text
)
SERVER foo
OPTIONS (query '{"query":"MATCH (c:company)-[e:employ]->(p:person)
RETURN p.nid, p.name, p.gender, p.age, c.name"}');
あとは persons テーブルに SELECT 文を発行すれば OK!
48
デモ
49
PostgreSQL から
SQL を使って
Neo4j の検索ができた。
やったね♪
50
と、いうことで
51
ロジカルデコーディングと
neo4j_fdw を組み合わせて
PostgreSQL 経由で
グラフデータベース
Neo4j を扱ってみた
52
で、何の役に立つのそれ?
面白ければ、いいのです。
53
このデモはともかく、
ロジカルデコーディングや
Foreign Data Wrapper で
PostgreSQL と
異種 DBMS 間連携が
簡単にできるかも!?
54
おしまい
55
補足
(というか蛇足)
56
FDW を良く
知っている人
からのツッコミ
57
あれ? FDW にも
更新 I/F あるじゃん
(PostgreSQL 9.3 以降 )
58
汎用的に SQL DML から
Neo4j の Cypher Query へ
変換する仕組みを考えないと
いけないのが面倒…
面倒なので放置中…
(だからロジデコ使った)

Mais conteúdo relacionado

Mais procurados

Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
shigeki_ohtsu
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
 
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etcPostgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
kasaharatt
 

Mais procurados (20)

OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
Couchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 OmoidenoteCouchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 Omoidenote
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
 
ソーシャルゲームログ解析基盤のMongoDB活用事例
ソーシャルゲームログ解析基盤のMongoDB活用事例ソーシャルゲームログ解析基盤のMongoDB活用事例
ソーシャルゲームログ解析基盤のMongoDB活用事例
 
Linux Namespace
Linux NamespaceLinux Namespace
Linux Namespace
 
AutoDock_Raccoon_japanese_ver.1.0
AutoDock_Raccoon_japanese_ver.1.0AutoDock_Raccoon_japanese_ver.1.0
AutoDock_Raccoon_japanese_ver.1.0
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
PostgreSQL運用管理入門
PostgreSQL運用管理入門PostgreSQL運用管理入門
PostgreSQL運用管理入門
 
OSC2015kyoto
OSC2015kyotoOSC2015kyoto
OSC2015kyoto
 
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etcPostgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
 
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法
 
AutoDock_doc_japanese_ver.1.0
AutoDock_doc_japanese_ver.1.0AutoDock_doc_japanese_ver.1.0
AutoDock_doc_japanese_ver.1.0
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
OSC2015nagoya
OSC2015nagoyaOSC2015nagoya
OSC2015nagoya
 

Destaque

Certificates of appriciations
Certificates of appriciationsCertificates of appriciations
Certificates of appriciations
Kashif Maqbool
 

Destaque (17)

Certificates of appriciations
Certificates of appriciationsCertificates of appriciations
Certificates of appriciations
 
Planificación informatica
Planificación informaticaPlanificación informatica
Planificación informatica
 
Animals 1 primaria
Animals 1 primariaAnimals 1 primaria
Animals 1 primaria
 
shailesh (2) (1)
shailesh (2) (1)shailesh (2) (1)
shailesh (2) (1)
 
Комарькова Дарья. Поиск и оценка бизнес-идей
Комарькова Дарья. Поиск и оценка бизнес-идейКомарькова Дарья. Поиск и оценка бизнес-идей
Комарькова Дарья. Поиск и оценка бизнес-идей
 
Mondrian
MondrianMondrian
Mondrian
 
What documents to upload to your Kloodle profile
What documents to upload to your Kloodle profileWhat documents to upload to your Kloodle profile
What documents to upload to your Kloodle profile
 
Презентация Живулин В.А.
 Презентация Живулин В.А. Презентация Живулин В.А.
Презентация Живулин В.А.
 
Презентация Войтюк В.Н.
 Презентация Войтюк В.Н. Презентация Войтюк В.Н.
Презентация Войтюк В.Н.
 
Proyectos productivos: Almendro
Proyectos productivos: AlmendroProyectos productivos: Almendro
Proyectos productivos: Almendro
 
Codex Alimetarius
Codex AlimetariusCodex Alimetarius
Codex Alimetarius
 
1st grade mice habitat
1st grade mice habitat1st grade mice habitat
1st grade mice habitat
 
A quick review of Python and Graph Databases
A quick review of Python and Graph DatabasesA quick review of Python and Graph Databases
A quick review of Python and Graph Databases
 
Peters fipboard
Peters fipboard Peters fipboard
Peters fipboard
 
An Intelligent Storage?
An Intelligent Storage?An Intelligent Storage?
An Intelligent Storage?
 
ROMINA NATALIA PARRA CONDE
ROMINA NATALIA PARRA CONDE ROMINA NATALIA PARRA CONDE
ROMINA NATALIA PARRA CONDE
 
Карточный домик в российской действительности
Карточный домик в российской действительностиКарточный домик в российской действительности
Карточный домик в российской действительности
 

Semelhante a Osc shimane-2016-do-postgres-dream-of-graph-database

PostGIS Handson | FOSS4G Tokyo 2014
PostGIS Handson | FOSS4G Tokyo 2014PostGIS Handson | FOSS4G Tokyo 2014
PostGIS Handson | FOSS4G Tokyo 2014
Hideo Harada
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
Yohei Azekatsu
 

Semelhante a Osc shimane-2016-do-postgres-dream-of-graph-database (20)

NoSQLデータベースと位置情報
NoSQLデータベースと位置情報NoSQLデータベースと位置情報
NoSQLデータベースと位置情報
 
PostGIS Handson | FOSS4G Tokyo 2014
PostGIS Handson | FOSS4G Tokyo 2014PostGIS Handson | FOSS4G Tokyo 2014
PostGIS Handson | FOSS4G Tokyo 2014
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 lt
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
Postgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpgPostgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpg
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 

Mais de Toshi Harada

Mais de Toshi Harada (20)

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiPgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-databaseDblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-database
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 

Osc shimane-2016-do-postgres-dream-of-graph-database