Bootcamp2025 NoSQL
by
コウムラ
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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を投げてしまった(メモリを食い潰すと大変なことに ...) ○ ディスクが満杯になってしまった ○ 障害時•移行作業後の復旧方法を間違えてしまった ○ 結果、バッチ処理がおかしくなったり、管理画面が落ちたり ... ● もしそういう場に直面しても、焦らないでください ○ 当事者にならないよう注意するのは大切だけど、仕方ないこともある ○ 気づいたら速やかに上司へ報告しよう ! ● バックアップやスケールアウトは、そういうときの保険になります ○ とりあえずフェイルオーバーする ○ バックアップから復旧する ちょっと⼩話