27
RDBとNoSQLの基礎と 組み合わせてDB構成をちょっと良くする話 @srockstyle

RDBNoSQLの基礎と組み合わせDB構成をちょっとよくする話

Embed Size (px)

Citation preview

RDBとNoSQLの基礎と 組み合わせてDB構成をちょっと良くする話@srockstyle

アジェンダ

• RDBのおさらいと使いどころ

• NoSQLのおさらいと使いどころ

• DB組み合わせて最適化な話

RDBのおさらいと使いどころ

RDBって?どこで使うの?

RDB=Relational Database

• MySQL、MariaDB、PostgreSQLとか

• 関係モデルという設計思想の元に開発されるDB。

関係モデル?

二つのテーブルは別々のデータだけど、一つの情報で凍結して情報抽出できるモデルのこと

About 関係モデル

• Aという情報に対してBという情報を紐付け、追加された情報がカラムの追加することなく取得可能。

• 別テーブルのユニークなIDと紐づけることで、カラムを増やさなくても別テーブルで関連データをばしばし増やせること

関係モデルのメリット

“Music”データベースに流すクエリ

SELECT bands.name,artists.name FROM bands INNER JOIN artists ON bands.id=artists.band_id WHERE bands.name = "Oasis";

新しいデータを追加

Artistsテーブルのidが5番目に、band_idが1のバンドに紐付いたGem Archerというアーティストをいれます。

“Music”データベースにさっきと同じクエリ実行

SELECT bands.name,artists.name FROM bands INNER JOIN artists ON bands.id=artists.band_id WHERE bands.name = "Oasis";

RDBの使いどころとおさらい

• 関連モデルで使うことが基本である

• もちろん関連以外でも使えるけど、関連性のあるデータを持たせる場面で多く使われる。

• テーブルを結合させるクエリを流すことで、カラムを追加ではなくレコード追加で変更されたデータを取得できる

NoSQLのおさらいと使いどころ

NoSQLって?どこで使うの?

NoSQL=Not Only SQL• RDB以外のDBプロダクト全部。

• DB=RDBだった歴史を変えて、DBの使い方を再び考え直して利用・発展を促進したいっていう考え方の呼称。

NoSQLのタイプキー・バリュー型:Key Value Store  →キーに対して値をもつ形。  例:DynamoDB/SimpleDB,Redis,Memcached ソート済みカラム型  →ソートキーに対してカラムの集合をもつ形。  例:Cassandra,HBase ドキュメント思考  →XMLやJson等、スキーマレスでデータ構造が柔軟なもの。  例:MongoDB,CouchDB

注:列指向DBとNoSQLは違うよ例:Redshift / BigQuery / Cloudera Impala

• 列のデータをひとまとまりにして取り出すときに効率的であるように設計されたDB群。

• 行指向(通常のRDB)はトランザクションがあったりする細かいデータの出し入れに向くが、こいつらは大きなデータを一発で引っ張るのに向く。

• NoSQLのカラム指向データモデルは多くの行のデータを大量の引っ張るのに向いてないので間違わないでね。

Key-Value Storeのポイント• Keyを元に検索のため、問い合わせが非常にシンプル。

• 更新が細かい単位で不可分( atomic)に行われる

• 関連性がないので書き込み箇所が少なく、問い合わせの実行・解釈も早い

以下のテーブルの場合keyで検索すればvalueが返ってくる。

Key-Value StoreにやらせてはいけないことJoinをしない  →複数テーブルをつなげた検索は向いてない トランザクション処理をかまさない  → 複数キーの読み書きをatomicに処理不可能なため 整合性がわりと緩めなので厳密すぎる場面は向いてない  →データの複製とかがすごくゆるいため

Key-Value Storeの使いどころ高速な性能の活用  →大量のデータを管理するテーブル等をもたせる

 例:RDBのキャッシュ、キーに応じたデータの保存

大容量データの保存  →スケーリングが用意なプロダクトなので大量データを保存可能  例:キーと値の組み合わせでたくさん保存★保存★

”Key Value StoreのNoSQLを RDBぽい使い方をする”

最悪の選択なので良い子は真似しないでね★

~すろっくさんがみてきた最悪のNoSQLの使い方をしている現場~

http://www.publickey1.jp/blog/10/nosqlrdbpartake.html

と思ってたら5年前に事例書いているひとがいた

この言葉にすべて集約されると思う

http://www.publickey1.jp/blog/10/nosqlrdbpartake.html

例外:ドキュメント指向DB• XMLやJsonでデータ構造を作ることでRDBぽくも使えてしまうやつら。

• MongoDB、CouchDB等。

• ドキュメントが闇(ユーザ会でも声あがってた)

NoSQL=Not Only SQL

• NoSQLはRDBをサポートするためのDBプロダクト

• NoSQLで全部、RDBで全部ではなく適材適所

• 「RDBはこれだからだめだ!」「NoSQLは機能足りないからつかえない!」ではなくて、マルチDBでなにかをやるようにする。

DB組み合わせ基礎パターンじゃあ具体的にどうつかうのん

データはRDB、キャッシュにNoSQL 使用例:Webサービス、ソシャゲ

MapReduceをNoSQL、データマートをDBMSで 使用例:ビッグデータ解析

まとめ

• RDBはテーブル同士を関連する形のとき使えるよ

• NoSQLはRDBをサポートする形で使うのが良いよ

• NoSQLをRDBのように扱うと悲劇しかないよ