常駐先で、ORACLEデータベースの管理やってます。ORACLE Platinum10g、データベーススペシャリスト保有してます。データベースの話をメインにしたいです

付き合うならどっち!?

»

ORACLEだけじゃ食っていけないとも思っています。

■君は一年前に流行したギャグを覚えているか!?

お笑い芸人は芸だけじゃなく、べしゃりも上手く無いと残っていけないようです。
それはテレビを観ていてよく分かります。

私はお笑い芸人では無いです。
ですが、一つの技術ばかりやっている現状には多少危機感を抱いています。
今はひな壇に座れていますが、その内、アルバイト生活になるかもしれません。
そこで、新しいことを始めようと思いました。

MongoDBというデータベースの勉強をしています。
データベースソフトにも色々あり、主流はORACLEのようなリレーショナルタイプのやつだけど、新しいジャンルの物も使われ出して来ています。
その一つがMongoDBです。

■ざっとORACLEと比較してみました

・ORACLE
 リレーショナルタイプのデータベース。
 SQLを使って表形式のテーブルにアクセスしてデータを取って来る。
 トランザクション管理が強力。
 基幹系の決済業務など、多数のテーブル間のデータ更新を保証するようなシステムに使用される。
 構築や運用をするのに高い知識と技術が必要。

・MongoDB
 NoSQLタイプのデータベース。
 その中でもドキュメント指向型と呼ばれるタイプ。
 SQLではなくMongoDB用のクエリでJSON形式のデータを扱う。
 トランザクション管理が出来ない。
 そのため、多数のテーブル間のデータ更新を保証出来ない。
 外部キーを定義することが出来ない。
 大量のデータを格納し素早く取得することに向いている。
 SNSやオンラインゲームなどで採用されている。
 スケールアウトやレプリケーションがORACLEに比べると、とても簡単に出来る。

簡単に書くとこんな感じです。
堅牢なORACLE、柔軟なMongoDBといった印象を受けました。
要はどういうモノを作ろうとしているかで、使う道具(この場合データベース)を選ぶことになると思います。
ORACLEだと、お金を扱う様な、データ整合性を厳密に管理したいシステム。
MongoDBだと、様々な形式のログデータを蓄積したい場合に使えそうです。

■開発するうえでの違い

・ORACLE
 データを格納するには、テーブルという器を定義する必要があります。
 テーブルを作成するにあたり、カラムごとに型と桁数を決めなければいけません。
 テーブル設計に変更が入るとテーブルの再構成が発生し、その度に開発の手が止まることになります。

・MongoDB
 テーブルのことをコレクションと呼びます。
 格納するレコードのことをドキュメントと呼びます。
 コレクションにドキュメントを挿入・更新するタイミングでその構造を変えることが出来ます。
 ORACLEだったらカラムが三つしかないテーブルに、カラムが四つあるレコードを入れようとしたらエラーで弾かれますが、MongoDBは素直に取り込んでくれるようです。
 同じコレクションに様々な構造のドキュメントを一緒に入れることが出来ます。
 ただ好きなようにデータを格納できるので、設計書と実態が剥離しそうで管理して行くのが大変そうだと思いました。
 それでも、設計しながら開発していくような現場では使い勝手がいいかもしれません。

■構築するうえでの違い

・ORACLE
 インストールに関しては、かなり面倒というか準備することが多いです。
 Linux版だとカーネルパラメータの設定、パッケージの導入、ユーザの作成などの準備が必要です。
 (※MongoDBもその辺り気にする必要はありますが、ORACLEの方が圧倒的にやることが多いです。)
 特にRAC導入を前提としたインストール作業は難易度が高く、しっかりとした手順書を準備していないと失敗します。
 データベース構築にあたっては、以下のようなことを設計しておく必要があります。
  ・メモリ
  ・初期化パラメータ
  ・REDOログ、制御ファイル、データファイルの配置先やサイズ
  ・表領域のサイズ
 構築する前に設計をしっかりしていないと、起動すら出来ないデータベースが出来上がってしまいます。

・MongoDB
 インストール簡単でした。
 DB構築も簡単でした。
 以下のようなステップでDBを作れました。
  1.MongoDBのインストール
  2.mongo.confに環境設定を記載
  3.データ格納用ディレクトリを作成
  4.MongoDBの起動
  5.Mongoシェルの起動
  6.useコマンドでDB作成

■勉強してみて思ったこと

MongoDBで使用するクエリは非常にSQLに似た文法で、リレーショナルタイプに慣れた人でも取っ付き易い印象です。
大きな違いの一つとして、MongoDBはテーブルの結合が出来ません。
なので、ORACLEのようにテーブルを正規化せず、そのままドキュメント形式で所有しているという印象です。
ヘッダと明細に分けず、そのまま一つのドキュメントとして持っているので、結合する手間が無い分速いのかもしれません。
データベース自体でトランザクション管理や結合などの処理は行えないため、アプリケーションの方でそういった処理を作り込まないといけないのかなと思いました。
色々と本を読んだり触って見て、何をやるにも手軽なデータベースだと思いました。
取りあえずDBを作ってみようと思ったら、すぐに作れるところがいい。
スケールアウトしたいと思えばORACLEに比べて簡単にノード追加やノード間のデータ分散が出来る。
バックアップ・リストアに関してもファイルのコピー(cpコマンド)で出来るというのは簡単を通り越して、「本当!?」って感じです。
色んな事を簡単に行えることがMongoDBの長所ですね。

■付き合うならどっち!?

固い感じの人がORACLEで、柔らかい感じの人がMongoDBって感じ。
そんな二つのデータベースをより分かり易く説明するために、流行りに乗って擬人化してみました。

付き合うならどっち!?

・ORACLE

db男1.jpg

・MongoDB

db男2.jpg

とにかく人の好み何て様々なんで、どっちがいいかなんてその人次第だと思います。
作ろうとしているシステムにとって、どっちのデータベースを使うのが適切か。
それだけです。
自分はどんな人と一緒だと居心地がいいか、それで付き合う人を選ぶのと一緒です。

では、次、女性として擬人化してみました。
さあ、どっち!?

・ORACLE

db女1.jpg

・MongoDB

db女2.jpg

結局、最後は自分の好みのタイプの女性を描いただけで終わりました。

※勉強したてなので、間違ったこと書いてたらすいません。

 あと、小説は来週から載せます。

Comment(0)

コメント

コメントを投稿する