Slide 1

Slide 1 text

© Geniee, Inc. 研修の⽬的 1. NoSQL について学ぶ ○ NoSQLの基本概念と種類(kvs型,ドキュメント型,グラフ型)を理解する ○ RDBとの違いを理解する 2. NoSQLを実際に触ってみる ○ 実際にmongoとredisを触ってみる ○ 基本的な操作から特徴的な機能を体験する 3. 各技術の特徴を理解し適切に使い分けられるようになる ○ 強みと弱みを理解し、適切なユースケースを把握する

Slide 2

Slide 2 text

NoSQL

Slide 3

Slide 3 text

© Geniee, Inc. “Not Only SQL” NoSQLとは 非リレーショナルデータベース

Slide 4

Slide 4 text

© Geniee, Inc. なぜNoSQLが注⽬されているのか 1 2 データの多様化 データの多様化が進んでおり、 従来のRDBでは対応できないケースが 増加している。 RDBの限界 RDBはスケーラビリティの問題を抱えて おり、単一サーバーでの運用が前提で あるため、拡張が難しい。

Slide 5

Slide 5 text

© Geniee, Inc. NoSQLで解決できること ① 複数サーバーへのデータ分散が複雑で、スケールアップのコストが⼤きい RDB サーバーの追加だけで容量と性能を簡単に拡張でき、 データ分散処理を⾃動的に最適化してくれるためコスト効率も良い NoSQL

Slide 6

Slide 6 text

© Geniee, Inc. NoSQLで解決できること ② スキーマが固定されるため、 スキーマ変更が頻繁な開発サイクルに対応しづらい RDB 事前定義なしにデータ構造を進化させられるスキーマレス構造のため、 迅速に機能追加や変更に対応でき様々な形式のデータも格納できる NoSQL

Slide 7

Slide 7 text

© Geniee, Inc. RDBとNoSQLの違い - データ構造 RDB NoSQL KVS ドキュメント グラフ 表と表同士の関係性でデータを 表現 RDB以外のデータ構造 KVS型,ドキュメント型,グラフ型など

Slide 8

Slide 8 text

© Geniee, Inc. RDBとNoSQLの違い - 特徴 
 RDBMS NoSQL データモデル 
 リレーショナル
 目的に応じてさまざま 
 得意分野 
 正規化された構造化データ 
 ビッグデータ、半構造化データ ※など
 重視している点 
 データの堅牢性/一貫性 
 スケーラビリティ/パフォーマンス 
 トランザクション 
 ACID準拠
 ないか、限定的
 操作言語 
 SQL(標準あり)
 製品によって異なる 
 ※半構造化データ… JSONやXMLのように、常に一定ではないが規則のあるデータ。 
          これに対して、 RDBのスキーマで事前に定義できるデータを構造化データ、 
          画像や音声、動画のような不定形のデータを非構造化データという。 


Slide 9

Slide 9 text

© Geniee, Inc. RDBとNoSQLの違い - プロダクト例 RDB NoSQL ・KVS ・ドキュメント ・グラフ

Slide 10

Slide 10 text

© Geniee, Inc. キー•バリューデータストア(KVS) ● データを主キーと値のペアで保存 ● データには主キーでアクセスする ● Amazon DynamoDB, Redis等 key 2 value 2 key 1 value 1 key n value n ・・ ・ 使用例 ● データ キャッシュ ● セッションの管理 Redis とかどのプロダクトでも使用されている ユーザーの情報とか静的データを保存することでmysql とか に検索クエリを投げなくて済む ● https://try.redis.io/

Slide 11

Slide 11 text

© Geniee, Inc. ドキュメント指向データストア ● JSONなど正規化されていない 形式の 「ドキュメント」をそのまま格納 ○ JSONはRDBMSと違って固定のスキーマを持たない ○ ドキュメントをさらに「コレクション」にまとめて管理することも ある ● Amazon DocumentDB, MongoDB 要素が異なるが 格納できる https://learn.microsoft.com/ja-jp/azure/archite cture/guide/technology-choices/data-store-ov erview#document-databases ● コンテンツ管理システム等 ● MongoDBはSFAで使用されてる ● https://www.pdbmbook.com/playground/mongo/wine/reset

Slide 12

Slide 12 text

© Geniee, Inc. グラフ指向データベース エッジ ノード https://learn.microsoft.com/ja-jp/azure/architecture/guide/technology-choices/data-store-o verview#graph-databases ● ノードとエッジの2種類の情報を格納 ● エッジによって,ノード間の関係性が 指定される ● 関係性を効率的に分析できる(友達 の友達の友達など) https://neo4j.com/news/how-much-faster-is-a-grap h-database-really/ ● ソーシャルネットワーク分析 ● 推薦システム等

Slide 13

Slide 13 text

© Geniee, Inc. 列ファミリデータストア ● データを行とカラムファミリとして保存する ● 列に対するクエリが効率的に ● Google Bigtable, Apache Cassandra 同じkey データの特性ごとに カラムファミリ ● センサー データ ● ログの分析等

Slide 14

Slide 14 text

Redis

Slide 15

Slide 15 text

© Geniee, Inc. Redisとは メモリ上でデータを管理する オープンソースのインメモリデータベース NoSQLの一種で、キーと値のペアを高速に処理可能

Slide 16

Slide 16 text

© Geniee, Inc. セッション管理‧キャッシュ リアルタイム更新 Redisの⽤途

Slide 17

Slide 17 text

© Geniee, Inc. Redisのクエリ

Slide 18

Slide 18 text

Mongo

Slide 19

Slide 19 text

© Geniee, Inc. JSON形式で柔軟にデータを保存・操作できる オープンソースのドキュメント指向型データベース Mongoとは

Slide 20

Slide 20 text

© Geniee, Inc. 
 説明
 シャーディング (パーティショニング) 巨大なデータベースを小さなサブセット(パーティション)に分割する方法 
 それぞれのパーティションは別々のノードに割り当てられる(シャーディング) 
 レンジパーティション,リストパーティション,ハッシュパーティション等 https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/partitioning-overview/ 
 レプリケーション 同じデータのコピーを複数のノードに保持する方法 
 
 スケールアウトの⼿法

Slide 21

Slide 21 text

© Geniee, Inc. データベースのコピーを保 存する各ノード レプリカ すべてのデータがすべてのレプリカに存在するには?                           すべてのレプリカでデータベースへの書き込みを行わないと行けない リーダーベースレプリケーション (アクティブ/パッシブ or マスター・スレーブレプリケーション) レプリケーション

Slide 22

Slide 22 text

© Geniee, Inc. リーダー レプリカ フォロワー レプリカ レプリケーションの ストリーム データ変更 テーブル: users 主キー: 1234 列: picture_url 古い値: old.jpg 新しい値: new.jpg トランザクション : 07023500 update users set picture_url = ”new.jpg” where user_id = 1234 select * from usres where user_id = 1234 フォロワー レプリカ 読み書きのクエリ 読み取りのみのクエリ ユーザー 1234 新しいプロフィール 画像を設定 ユーザー 2345 ユーザー1234 の プロフィール画像を閲覧 参照のみ 参照クエリの負荷分散 データのバックアップ リーダーベースレプリケーション

Slide 23

Slide 23 text

© Geniee, Inc. リーダー レプリカ フォロワー レプリカ レプリケーションの ストリーム データ変更 テーブル: users 主キー: 1234 列: picture_url 古い値: old.jpg 新しい値: new.jpg トランザクション : 07023500 update users set picture_url = ”new.jpg” where user_id = 1234 select * from usres where user_id = 1234 フォロワー レプリカ 読み書きのクエリ 読み取りのみのクエリ ユーザー 1234 新しいプロフィール 画像を設定 ユーザー 2345 ユーザー1234 の プロフィール画像を閲覧 リーダーに 障害発生 ノード障害への対処

Slide 24

Slide 24 text

© Geniee, Inc. リーダー レプリカ リーダー レプリカ レプリケーションの ストリーム select * from usres where user_id = 1234 フォロワー レプリカ 読み書きのクエリ 読み取りのみのクエリ ユーザー 1234 新しいプロフィール 画像を設定 ユーザー 2345 ユーザー1234 の プロフィール画像を閲覧 フォロワーのいずれかをリー ダーに昇格 フェイルオーバー update users set picture_url = ”new.jpg” where user_id = 1234 耐障害性向上 ノード障害への対処

Slide 25

Slide 25 text

© Geniee, Inc. ・ドキュメント型 ・スキーマレス 入れ子構造がとれる 実行中に自由に スキーマを変更可能 Mongoのデータ構造

Slide 26

Slide 26 text

© Geniee, Inc. Excel Oracle Mongo ブック Schema Database シート Table Collection 行 Column Document 列 Row Field セル Field Value Mongoのデータ構造

Slide 27

Slide 27 text

© Geniee, Inc. 集約(aggregate) テキストインデックス 地理空間クエリ Mongoのクエリ

Slide 28

Slide 28 text

© Geniee, Inc. Mongoのクエリ

Slide 29

Slide 29 text

© Geniee, Inc. https://www.oreilly.co.jp/books/9784873118703/ 参考書籍

Slide 30

Slide 30 text

© Geniee, Inc. ● 実は、DB障害はわりとよく起こっています ○ 誰かがCROSS JOINを投げてしまった(メモリを食い潰すと大変なことに ...) ○ ディスクが満杯になってしまった ○ 障害時•移行作業後の復旧方法を間違えてしまった ○ 結果、バッチ処理がおかしくなったり、管理画面が落ちたり ... ● もしそういう場に直面しても、焦らないでください ○ 当事者にならないよう注意するのは大切だけど、仕方ないこともある ○ 気づいたら速やかに上司へ報告しよう ! ● バックアップやスケールアウトは、そういうときの保険になります ○ とりあえずフェイルオーバーする ○ バックアップから復旧する ちょっと⼩話