0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

比べてみよう リレーショナル vs ドキュメント

Posted at

元スライドはこちら

それぞれの特徴

リレーショナルDB(MySQL) ドキュメントDB(MongoDB)
データ構造 テーブルという表計算ソフトのような構造 正規化という手法を用いて適度に重複が発生しない構造(テーブル)を事前に定義する 正規化は1-3段階まであり厳密な設計思想が存在する JSON形式 スキーマレスなので事前に全ての定義をする必要はない 緩やかな設計思想で、JSONのモデリングを行う 主キーは自動採番で後からインデックスの設定もできる 遅いけどコレクション結合もできる
処理速度 インデックスの効率に依存する 細かいメモリチューニングができる HDDに書き込むオーバーヘッドがある インデックスはRDB同様に利用できる インメモリで動くためオーバーヘッドが少なく高速 データの集計などの単純計算はRDBよりも高速にできる
特性 ☆ACID特性という原則を守る事ができる ※ とても厳格なので金融や基幹システムなどに向いている ☆Base特性という原則を守る事ができる ※ ゲームのセーブデータや粒度の細かい操作ログ記録などに向いている
分散性 NDBクラスタという特殊なテーブルを使う以外には基本的にレプリケーションを利用した読み込み分散のみ シャーディングとい機能を利用して書き込み分散ができる

分散化アーキテクチャ

垂直分散 水平分散
MySQL(レプリケーション) MongoDB(シャーディング)
Screen Shot 2022-12-27 at 8.24.31.png Screen Shot 2022-12-27 at 8.24.40.png
スレーブがマスターのリレーログを読みに行って自分のデータベースに情報を書き込む
master ⇐> slave間の整合性を保持するための禁忌事項がいくつかある
日付を指定した削除更新クエリを発行してはいけないなど
shardingしているどのノードにも書き込みができる
mongsはキーを元にルーティングをしているだけ
1つのシャードがダウンした場合にデータを転送して別のシャードで復元できる

※ MongoDBレプリカセットの話は一旦省略しています
くしくは、こちらをご覧ください

SQL構文の比較

スキーマレスなので、テーブルの設計が不要になり、カラム長の変更や追加削除が用意になる反面、取り出す時の対応をきちんとしないと、null参照によるエラーが発生しやすくなるので注意して利用してください

MySQL MongoDB
1. スキーマ定義
create table customers (
id number(10) not null primary key,
name varchar(40) not null,
tell varchar(40) not null,
)

2. データの投入
insert into customers(id, name, tell) values(null, ‘test’, ‘080-0000-0000);’

3. カラムを増やす
alter table customers add address column varchar(255);

4. データの投入
insert into customers(id, name, tell) values(null, ‘test’, ‘080-0000-0000);’
1. コレクション定義
db.createCollection( "customers")

2. データを入れる
db.customers.insert([{name: ‘test’, tell: ‘080-0000-0000’}])

3. カラムを増やしてデータを入れる
db.customers.insert([{name: ‘test’, tell: ‘080-0000-0000’,address:’Tokyo’}])








利用例

MySQL MongoDB
□ECサイトなどの商品管理
重複なく設計されたマスタ系のデータテーブルを保管して参照する
□銀行システム
厳格なトランザクションの下で、入金、出金、振り込みなどの操作を行わなければならない
□大量のログ保管
ヒートマップデータやアプリ操作ログなどの保管や統計的集計
□ゲームのセーブデータ
特定個人のプレイデータで厳密排他制御の必要性がない

Railsを利用しないアーキテクチャ例(MongoDB)

マイクロサービスで情報の蓄積 閲覧にはクライアントツールを使う
☆例: 視聴ログなどの蓄積にマイクロサービスを利用する
■AWS
MongoDB Atlas serverless architecture
Awsを利用したマイクロサービスのアーキテクチャ

■Atlas
Microservices with MongoDB Atlas
MongoDBの提供するマネージドサービス
☆例: 蓄積されたデータの閲覧ツールを実装せずに閲覧する
■ Studio
Studio 3T(GUI client)
MySQLだとnavicatというツールがあるがそれと同じもので
クエリさえ分かればデータが引き出せるというもの
■HumongouS.io
HumongouS.io(Web GUI )
上記のWeb版

積極的に活用していきたい新機能

ジオコーディング

MySQL MongoDB
MySQLにも空間データを扱う型が存在します、PointやPolygonなどの複雑なGeometoryもサポートしています
空間データ型
緯度経度
MongoDBでは、複雑なGeometry(点、直線、多角形)をlon/latで扱うものと、2Dの座標空間を扱えます(点、四角、多角形、円、Sphere)
球面空間でのクエリもサポートしています
Geospatial Queries

どちらも、緯度経度による空間データを扱えるので、近隣の施設などを検索することができます

グラフ表現

MySQL(MariaDB community edition) MongoDB
OSS版のMariaDBだとデータベースエンジンレベルでの用意があるが
AWSのAuroraではサポートしていないそう
SQL Server Graph Features




MongoDB as a Graph Databaseを確認すると、ノード(頂点)、エッジ(リレーション)、プロパティ、ラベルを基本としてグラフ型のオブジェクトとその検索をサポートしている
graphLookupという、agrreegation piplineの機能を使うだけで簡単に利用できる
別途GraphQLなどのデータベースを用意しなくても利用できるようので使い勝手がいい
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?