見出し画像

ビッグデータ収集に最適なNoSQLとは

外資系企業でソフトウェアエンジニアをしております、タロイモと言います。今日もよろしくお願いします。

ソフトウェアを扱うエンジニア、プログラマーの方でRDB(リレーショナル・データベース)を使っている方は多いと思います。
しかし、5Gが当たり前の世界ではデータの数が膨大すぎて、RDBでは対応することができなくなるかもしれません。

今回はこれまでのデータベースとは違う仕組みを持つNoSQLのメリット等を、RDBと比較しながら紹介します。


1. NoSQLの背景

2000年代中盤まで全てのシステムは、商用だとOracleやDB2、オープンソースだとMySQLやPostgeSQLなどのRDBを採用してきました。

RDBが長年採用されていた理由は、システムにおいて銀行などの取引システムやオンライン販売などが主流であったため、それほど頻繁にデータベースとの接続が必要なかったためです。

しかし、2000年代後半にかけて、世の中にSNSや検索サイト(Googleなど)が普及しました。

ご存知の通り、SNSには日々膨大なデータが書き込まれます。
RDBはACID属性を備えたトランザクション処理が前提のため、SQLのクエリを用いてデータの整合性を追求するあまり、大規模で高速なデータ更新には不向きでした。

そこで誕生したのが、NoSQLです。

2. NoSQLのメリット

⑴スケールアウトのしやすさ

これまでのRDBは、スケールアウトの難易度は非常に高いものでした。
その理由は、RDBは厳密なトランザクション管理をするためにストレージを共有するため、データを一元管理する必要があったからです。
そのため、RDBの機能を向上させるには、スケールアップする必要がありました。

RDBがスケールアウトしにくくて、NoSQLがスケールアウトしやすい理由
参考:https://qiita.com/kubocchi/items/e123cffc518c402b399b

対して、NoSQLは厳密なトランザクション管理を行いません。
そのため、コンピュータの台数を増やすことで機能向上を図るスケールアウトが可能になりました。

スケールアップよりもスケールアウトが良い理由はコンピュータ1台の性能を向上させるよりも、コンピュータの数を増やすことで結果的に全体の性能を向上させる方が安上がりだからです。

スケールアップ:コンピュータの構成部品を増設・交換するなどして性能や容量を拡張する手法。
スケールアウト:コンピュータの台数を増やすことでシステム全体の性能を向上させること。
参考:e-words


⑵データ構造の柔軟性
SNSやゲームなどは構造化できないデータが大量に含まれることになります。

スクリーンショット 2020-06-21 14.47.56

RDBはデータをテーブルで管理するため、このような構造化できないデータをテーブルに収めることは難しいものでした。
しかし、NoSQLは以下のようにデータをJson形式で管理するため、非構造的なデータも容易に収めることができます。

{
    "name": "たろう",
    "text": "こんにちは、よろしく"
}
{
    "name": "はなこ",
    "text": "こんにちはー",
    "text": "この写真よくない?",
    "image": "woman.jpg"
}
{
    "name": "たろう”,
    "phone": "01 00 00 01 00 01 0b ..."
}


3. NoSQLのデメリット

信頼性の低下
NoSQLがRDBにとって変わりにくい理由が、信頼性の低さです。
トランザクション管理によるデータ整合性や耐久性を犠牲にすることで、大量のデータを扱うことを可能にしているため、金融系など精密なデータ整合を必要とするシステムでは危険があります。


4. まとめ

まとめると、NoSQLは大量の非構造データを扱うSNSや低レイテンシーが必要なゲームなどのアプリケーションに向いています。

一方でデータの整合性を犠牲にしているため、正確な整合性を要求する金融システムには不向きであります。
しかしながら、金融系でもカスタマーサポート部門にNoSQLを導入することも増えており、適材適所で使い分けるということもできます。

この部分を意識し、開発するサービスに合っているならば使うメリットがあるデータベースだと感じます。

本日もご精読ありがとうございました。

よろしければサポートお願いします! サポートは、サービスの開発・改良や、記事を書く際の素材費とさせていただきます。 少しでも有益な情報発信をしていけるよう努めてまいります。 是非とも応援よろしくお願いします!!!🙇‍♂️