ryota21silvaの技術ブログ

Funna(ふんな)の技術ブログ

これまで学んだ技術の備忘録。未来の自分が救われることを信じて

NoSQLの種類・特徴・良記事をまとめる

仕事でNoSQLに触れる機会がちょくちょくあるので、NoSQLの種類・特徴・良記事を簡単にまとめてみた。

NoSQLとは

特徴

  • 拡張性と分散処理に優れている
  • 大容量データの高速処理が可能
  • データの整合性が緩い

種類

  • キーバリュー型
    • キーとバリューの単純な1対1管理。
    • Dynamo,Redis
  • 列指向型(カラム指向型)

    • キーバリュー型に「列(カラム)」の概念を追加したもの。 行に付与されたキーが複数のカラムを保持しており、必要に応じてカラムを追加することができる。つまり行キーごとのカラム数を動的に増やすことが可能となる。
    • RDBMSがレコード(行)を一塊のデータとして扱うのに対して、列(カラム)方向にデータを扱う。
      • 特定の列の値をまとめて処理することに長けており、列単位での大量集計、大量更新が得意(ある列の値を一斉に更新する etc.)。
      • 一方で複雑な検索・集計、特定の行を抜き出して更新・削除したりするのは苦手。
    • Cassandra,Bigtable,HBase
      • Cassandraについてはこの辺りの記事が良かったです。

        Cassandraでは、A・P(可用性・分断耐性)を担保するのに対し、冗長構成をとったRDBMSではC・A(整合性・可用性)を担保するように設計されています。
        techblog.yahoo.co.jp

      • Cassandraの設計ポイントが分かりやすい。 qiita.com

    www.publickey1.jp

  • ドキュメント型

    • JSON」「XML」といったドキュメントでデータを管理する。1レコード内に複雑な階層関係を入れることができる。ドキュメントはユニークIDで特定できる。
    • 個々のドキュメントのデータ構造が自由なので、事前にテーブルの構造を厳密に決めておく必要がない(スキーマレス)。ある程度決めておかんと地獄になるやろうけど。
    • MongoDB, CouchDB, FireStore
  • グラフ型
    • グラフ構造を備えたデータベースで、ノード(頂点)、エッジ(辺)、プロパティ(属性)の3つの要素から構成され、ノード間の関係性を表現できる。データの構造が従来のリレーショナルではなくネットワーク状になっている場合に、格納・検索の面で威力を発揮する。
    • Neo4j, InfiniteGraph

    グラフデータベースとは何か ~ネットワーク状のデータ構造から瞬時に情報を検索するDBを解説 - アイマガジン|i Magazine|IS magazine

NoSQL図
NoSQL基礎の基礎 - Qiita

雑感

  • Dynamo、Redisは触れた機会が多いけど使っててめっちゃ速い〜てなる。あとドキュメント型はFireStoreで触れたことあったけど、Mongoがドキュメント型であること、AWSにMongo互換のサービスがあることは知らんかった。
  • 逆に列指向型(カラム指向型)のように行キーごとにカラム数を動的に増やせるデータモデルが存在することは仕事で調べるまで知らんかった。
  • とりあえず思うことは、要件定義~設計するときにRDBで何とかしようとしがちやけど、NoSQLを選択肢に入れることでハッピーになれないか、はたまたログを吐き出すだけで要件を満たせないかなど柔軟に考えていきたい。まあ経験がモノを言うんかもしれんけど、、😡

他に参考にした記事たち