Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PostgreSQL🐘と 比較しながら選ぶデータベース / select-database-usecase

PostgreSQL🐘と 比較しながら選ぶデータベース / select-database-usecase

Open Source Conference 2020 Online/Niigataの登壇資料です。
https://ospn.connpass.com/event/181888/

soudai sone

July 25, 2020
Tweet

More Decks by soudai sone

Other Decks in Technology

Transcript

  1. と
    比較しながら選ぶデータベース
    ユースケース別に違いを見極め、RDBとNOSQLを使いける
    Open Source Conference 2020 Online/Niigata

    View full-size slide

  2. と
    比較しながら選ぶデータベース
    ユースケース別に違いを見極め、RDBとNOSQLを使いける
    Open Source Conference 2020 Online/Niigata
    RDBMS


    View full-size slide

  3. データベースを正しく選択すること

    

    

    What is it?

    View full-size slide

  4. データベースは

    

    何を基準に選んでいますか?

    What is it?

    View full-size slide

  5. データベースの選ぶには

    

    特徴を掴むことが大切

    What is it?

    View full-size slide

  6. ユースケースに合わせて

    

    データベースの

    

    種類と特徴を理解しよう!

    What is it?

    View full-size slide

  7. https://speakerdeck.com/soudai/explanation-of-database-types
    アーキテクチャ別の違いの資料はこちら 


    View full-size slide

  8. 1. 自己紹介

    2. RDBとNOSQL

    3. セッションを保存したい

    4. まとめ

    あじぇんだ

    View full-size slide

  9. 1. 自己紹介

    2. RDBとNOSQL

    3. セッションを保存したい

    4. まとめ

    あじぇんだ

    View full-size slide

  10. 自己紹介

    曽根 壮大(35歳)

    Have Fun Tech LLC 代表社員

    

    そ  ね   たけ とも

    ● 日本PostgreSQLユーザ会 勉強会分科会 担当

    ● 3人の子供がいます(長女、次女、長男)

    ● 技術的にはWeb/LL言語/RDBMSが好きです

    ● コミュニティが好き

    View full-size slide

  11. 1. 自己紹介

    2. RDBとNOSQL

    3. セッションを保存したい

    4. まとめ

    あじぇんだ

    View full-size slide

  12. RDBとNOSQL

    

    

    RDBとNOSQL

    View full-size slide

  13. RDBとNOSQL

    ↓

    なにが違うのか?

    RDBとNOSQL

    View full-size slide

  14. RDBとNOSQL
    アーキテクチャ
    / データモデル
    マスタ型 P2P型 その他
    リレーショナル MySQL
    PostgreSQL
    ProxySQL
    pgpool-2
    キーバリュー Redis Memcached Redis Cluster
    カラム指向 Redshift Cassandra
    ドキュメント指向 MongoDB
    グラフ指向 Neo4J InfiniteGraph
    ※代表的なデータベースのソフトウェアの抜粋


    View full-size slide

  15. RDBとNOSQL
    アーキテクチャ
    / データモデル
    マスタ型 P2P型 その他
    リレーショナル MySQL
    PostgreSQL
    ProxySQL
    pgpool-2
    キーバリュー Redis Memcached Redis Cluster
    カラム指向 Redshift Cassandra
    ドキュメント指向 MongoDB
    グラフ指向 Neo4J InfiniteGraph
    ※代表的なデータベースのソフトウェアの抜粋


    View full-size slide

  16. リレーショナルデータモデルに

    最適化されたデータベース

    

    現在も多くのシステムで広く使われている

    

    RDBとNOSQL
    RDB


    View full-size slide

  17. RDB以外のDBシステムの総称

    (Not Only SQL)

    

    グラフデータモデルをはじめ、

    RDBの不得意な分野に特化している

    RDBとNOSQL
    NOSQL


    View full-size slide

  18. つまり、RDB以外はすべてNOSQL

    

    

    RDBとNOSQL

    View full-size slide

  19. RDBと根本から違う

    

    

    RDBとNOSQL

    View full-size slide

  20. ● データモデルが違うのでデータ設計も違う

    ● スケールアウトやスケールアップの有効性が違う

    ● パフォーマンスチューニングの方法が違う

    ● アプリケーションからの接続や扱い方が違う

    RDBとNOSQL
    RDBとNOSQLの違い

    


    View full-size slide

  21. 違いを捉えて特徴を掴む

    

    

    RDBとNOSQL

    View full-size slide

  22. 1. 自己紹介

    2. RDBとNOSQL

    3. セッションを保存したい

    4. まとめ

    あじぇんだ

    View full-size slide

  23. Webアプリケーションのセッション

    

    

    セッションを保存したい

    View full-size slide

  24. Webアプリケーションのセッション

    ↓

    どこに保存するか?

    セッションを保存したい

    View full-size slide

  25. ● ファイル

    ● Cookie

    ● RDBMS

    ● NOSQL

    セッションを保存したい
    セッションの保存先

    


    View full-size slide

  26. ● ファイル

    ● Cookie

    ● RDBMS

    ● NOSQL

    セッションを保存したい
    セッションの保存先

    

    ApacheのWebサーバのローカルなどに 

    セッションIDに紐づけて保存する。 

    

    シンプルな反面、複数のWebサーバ運用の時に 

    セッション情報を共有するにはファイル共有が必要。 


    View full-size slide

  27. ● ファイル

    ● Cookie

    ● RDBMS

    ● NOSQL

    セッションを保存したい
    セッションの保存先

    

    ブラウザのCookieの中にセッション情報も一緒に保存し、リク
    エストの際に一緒に送信する。 

    

    Webサーバが複数台でもセッションを共有できるので 

    負荷に対してはスケールするが、 

    Cookieをジャックされるなどの様々なリスクがある。 

    

    JSからCookieを触れる(HttpOnly=false)だと特に危険 


    View full-size slide

  28. ● ファイル

    ● Cookie

    ● RDBMS

    ● NOSQL

    セッションを保存したい
    セッションの保存先

    


    View full-size slide

  29. RDBMSに保存したことありますか?

    

    

    セッションを保存したい

    View full-size slide

  30. ● ファイル

    ● Cookie

    ● RDBMS

    ● NOSQL

    セッションを保存したい
    セッションの保存先

    

    セッションをRDBMSに保存するとセキュリティ的にも安心。複数の
    Webサーバでセッション共有することができる。 

    

    しかし負荷が高くなるとRDBMSが問題になりやすい。 

    

    特にメインのデータと同じRDBMSで共有していると、 

    高負荷時にRDBMSにあわせ技で負担になる。 


    View full-size slide

  31. ● ファイル

    ● Cookie

    ● RDBMS

    ● NOSQL

    セッションを保存したい
    セッションの保存先

    

    シンプルにWebサーバ間でセッションを共有できて、 

    セキュリティ的にも安心で、 

    スケールするデータストアが欲しい!! 


    View full-size slide

  32. どんなNOSQLがマッチするか?

    

    

    セッションを保存したい

    View full-size slide

  33. どんなNOSQLがマッチするか?

    ↓

    MemcachedとRedis

    セッションを保存したい

    View full-size slide

  34. ● 分散型インメモリKVS(キーバリューストア)

    ○ マルチスレッドでMany CPUにも強い

    ○ 簡単に分散することも出来る

    ● しかし、AWSのElasticacheを使う場合は分散方法に注意が必要

    ○ 同じセッションを取得するクライアント側の実装が必要

    ○ PHPはAWSが専用クライアントを提供してる。

    ● アトミックな処理は苦手なので、セッションのロックが使いたい場合の時は
    注意が必要

    ○ 例えばSPAで非同期で同時にセッションを触るなど

    セッションを保存したい
    Memcached


    View full-size slide

  35. ● インメモリKVS(キーバリューストア)

    ○ プライマリ、セカンダリ構成

    ○ クラスタ構成が作れるRedis Clusterもある

    ● RDBMSと同じようにシンプルにセッションを扱える

    ○ アトミックなロック処理が作れるので安心

    ● しかしRedis Clusterでない場合に書き込みはスケールしない

    ○ そこでRedis Clusterなのだけど、お高くなりやすい

    ● 多くのWebサービスなら1台でも対応可能

    ○ メンテナンス出来るなら、あとからCluster移行もできる範囲

    セッションを保存したい
    Redis


    View full-size slide

  36. RDBMSが問題になったら

    

    とりあえずRedisでも大丈夫

    セッションを保存したい

    View full-size slide

  37. 1. 自己紹介

    2. RDBとNOSQL

    3. セッションを保存したい

    4. キャッシュを使いこなしたい

    5. まとめ

    あじぇんだ

    View full-size slide

  38. アーキテクチャ x データモデル

    ↓

    データベースの種類と特徴を決める

    まとめ

    View full-size slide

  39. 保存したいデータモデル

    x

    重視したいアーキテクチャ

    ||

    使うべきデータストア

    まとめ

    View full-size slide

  40. 正しく選べば

    

    RDBMSをもっと活かせる

    まとめ

    View full-size slide

  41. 長所と短所を知る

    

    

    まとめ

    View full-size slide

  42. 長所と短所を知る

    ↓

    要件に合わせる

    まとめ

    View full-size slide

  43. “もし現在のアプリケーションがRDBで
    上手く動いているのであれば、
    それをNOSQLに置換する理由は無いし、
    それを勧めたりはしない”
    Nate McCall (@zznate)

    View full-size slide

  44. データベースの種類と特徴を捉えて

    

    適切なデータベースを選ぶ

    まとめ

    View full-size slide

  45. ご清聴ありがとうございました

    

    

    まとめ

    View full-size slide