10年後のデータベース アーキテクチャ と青春の日々

Preview:

DESCRIPTION

Datomicについて。更にアプリキャッシュのパフォーマンスの簡易テスト。

Citation preview

Creat r’s Night2012/03/16

事業創造室 加藤寛之

Wednesday, March 21, 12

本日のお題

10年後のデータベースアーキテクチャと青春の日々

Wednesday, March 21, 12

10年後のデータベースアーキテクチャ?

Wednesday, March 21, 12

DatomicWednesday, March 21, 12

なにそれ美味しいの?

Wednesday, March 21, 12

Hacker Newsのコメントより

Datomic is a UFO filled with advanced alian technology

Wednesday, March 21, 12

ひっじょ~に興味深いね

Wednesday, March 21, 12

ということでアーキテクチャをご紹介

Wednesday, March 21, 12

これまで

Web Server

DB Server

INSERT / UPDATE SELECT

Wednesday, March 21, 12

これまで

Web Server

DB Server

増えたらだめぇ!パンクしちゃう!

INSERT / UPDATE SELECT

Wednesday, March 21, 12

これまで

Web Server

DB Server(master)

DB Server(slave)

データ同期

INSERT / UPDATE SELECT

Wednesday, March 21, 12

これまで

Web Server

DB Server(master)

DB Server(slave)

データ同期

INSERT / UPDATE

SELECT

DB Server(master)

同期

Wednesday, March 21, 12

これまで

Web Server

DB Server(master)

DB Server(slave)

データ同期

INSERT / UPDATE

SELECT

DB Server(master)

同期

Wednesday, March 21, 12

これまで

Web Server

DB Server(master)

DB Server(slave)

データ同期

INSERT / UPDATESELECT

DB Server(master)

同期

cache

Wednesday, March 21, 12

頭を悩ませることがいっぱい ・INSERT / UPDATEがScaleしにくい ・データの復旧が面倒 ・キャッシュのTTLをコンテンツ毎に管理 ・レプリケーションサーバーが増える  => マスタへの負荷が増大 ・なによりDBがいつもボトルネック ・などなどどんどん物事が複雑になっていく。

Wednesday, March 21, 12

そこでDatomic

Wednesday, March 21, 12

特徴その1

保存されているデータは更新不可能(Append-Only)

・Lockされない(だって更新しないもん)・更新処理は後述するTransactorに新しいデータの作成 として実行キューに登録/処理される。

Wednesday, March 21, 12

特徴その2

アプリケーションプロセスにてクエリ処理が行われる

・発行されるクエリの解析はアプリ側で行う。・クエリの解析結果と、ローカルに存在するインデックス から対応する固有ID(のリスト)を取得。

Wednesday, March 21, 12

特徴その2

自プロセス内のキャッシュから固有IDに対応するデータを検索。

・キャッシュ上に存在すれば通信さえ発生しない。・キャッシュ上になければ元データの保存場所から取得。

Wednesday, March 21, 12

特徴その3

データの追加 / 更新処理はすべてTransactor経由で行われる。

・元データの保存場所に対してアプリケーションが 直接更新処理を行う訳ではない。・全ての更新履歴を保存しているので、データの復旧とか 楽勝すぎワロタ。

Wednesday, March 21, 12

Datomic

Web Server

Storage Service

INSERT / UPDATE

GET ENTITY(request only data segments, not query)

Transactor(data segments)

Data Index

cache Live Index cache Live Indexcache Live Index

Wednesday, March 21, 12

Datomic(更新時)

Web Server

Storage Service

INSERT / UPDATE

Transactor(data segments)

Data Index

cache Live Index cache Live Indexcache Live Index

Wednesday, March 21, 12

Datomic(更新時)

Web Server

Storage Service

INSERT / UPDATE

Transactor(data segments)

Data Index

cache Live Index cache Live Indexcache Live Index

Wednesday, March 21, 12

何が嬉しいの? ・そもそもキャッシュHITしたら  Storage Serviceにアクセスさえない。 ・UPDATEがないのでlockしない。  => 他のクエリに迷惑をかけない。 ・Storage Serviceは単純にデータを  提供するだけ!クエリ解析とか  キャッシュとか考えなくていい。

Wednesday, March 21, 12

個人的に各サーバーの役割分担がより明確になってると思ったり

Wednesday, March 21, 12

でもサービスはリリース前でした(́・ω・`)

Wednesday, March 21, 12

でもアプリケーションに組み込むライブラリの参照実装(Java)は公開されている。。

Wednesday, March 21, 12

なぜRubyがないのか?

Wednesday, March 21, 12

ないなら作っちゃえ!(^O^)

Wednesday, March 21, 12

ごめんなさい間に合いませんでした

Wednesday, March 21, 12

日本語でおk

Wednesday, March 21, 12

時間まで、しばしご鑑賞ください

Wednesday, March 21, 12

というのもアレなので別の策を考えてみた

Wednesday, March 21, 12

アプリケーション内キャッシュって

どこまで有効なんだろ?

Wednesday, March 21, 12

とある社内ツールで試してみた

Wednesday, March 21, 12

その名もKatomic

Wednesday, March 21, 12

Katomic= in-memory KVSwritten with Ruby

Wednesday, March 21, 12

Katomicの有効/無効で処理速度の変化を比較

してみたよ

Wednesday, March 21, 12

結果Katomic 合計 ビュー DB その他

無効 1,608.6 735.5 8.3 864.8

有効 327.1 323.7 0.6 2.8

速度比 490% 230% 138% 3,086%

単位: ミリ秒

Wednesday, March 21, 12

圧倒的じゃないか、我が軍は!

Wednesday, March 21, 12

アプリ内キャッシュっていいかもー

Wednesday, March 21, 12

ということでDatomicをもっと調査/検証します!

Wednesday, March 21, 12

Thanks!

Wednesday, March 21, 12

Recommended