🥞
【NoSQL】種類メモ
下記はこちら参照
また、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