🥞

【NoSQL】種類メモ

2024/03/24に公開

下記はこちら参照
また、NoSQLのユースケースを数多く取り上げた記事はこちら

キーバリューストア

  • キーバリュー型はキーと値がペア
  • キーの値は、一意
  • 値は、キーを介してのみ参照可能
  • キーバリュー型は大量データの保存が必要
  • データの取得に際し複雑な問い合わせを行なわないケースに向いてる
  • RedisやDynanoDBは、キーバリュー型

グラフストア

  • グラフ型は「ノード」と呼ばれるデータの実体と、「エッジ」と呼ばれるノードどうしの関係性を示す情報で構成される。
  • ノードとエッジには、「プロパティ」と呼ばれる属性情報が付く
  • ノードをまたいだ検索でも迅速に結果を得られる
  • 特にRDBと比べた場合のスピードに優位性がある
  • Neo4jやJanusGraph、InfiniteGraphなどで採用されてる

カラムストア

  • ワイドカラムストア型は、キーバリュー型の「値」の部分が1つ以上のカラム(列)になったもの
  • 年齢や氏名など属性ごとにカラムを設定できるため、一見するとRDBのように見えるかもしれません
  • 各行に同じ列がなくても良い
  • 列を動的に追加できる
  • すべての列に値がない状態も許容される
  • CassandraやBigTableなどが挙げられる
  • 下記はこちらを参照
  • Mysqlとかは行指向
    • 行指向では行を一つのデータの塊として扱う
    • 追加更新削除のようなオントランザクション処理が得意
  • 列指向は特定の列をまとめて処理することに長けている
    • 例えばあるテーブルから価格と商品名だけ抜き出すなど
    • 列を抜き出して操作する集計処理が得意

ドキュメントストア

  • ドキュメント型は、キーに紐づくデータをドキュメント形式で格納する方式
  • データの部分は、JSONやXML形式で記述可能
  • 書き方の自由度が高いため、複雑な要素を持つデータも格納できる
  • 大量データにも対応可能
  • ドキュメント型は、MongoDBなどで採用されてる
  • 下記はこちらを参照
  • テーブルの代わりにコレクションを使う
    • コレクションの作成
      db.createCollection('coltest')
        { "ok" : 1 }
      
    • POST データの追加
       db.coltest.insert({
        name: 'suzuki',
        age: 45,
        blood: 'O'
        })
        WriteResult({ "nInserted" : 1 })
      
    • GET データの参照
      db.coltest.find()
      { "_id" : ObjectId("60068c6d9855db4d1205dbd5"), "name" : 'suzuki', "age" : 45, "blood" : 'O' }
      

Discussion