よしたく blog

ほぼ週刊で記事を書いています

NoSQL キーバリュー型のまとめ

はじめに

NoSQLの基礎知識について読んでいます。

yoshitaku-jp.hatenablog.com

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

今回はキーバリュー型についてまとめておきます。

キーバリュー型

キーバリュー型はデータモデルがシンプルです。キーとバリューしかないです。このセットをデータとして書き込み、保存しておきます。データを呼び出すときはキーを指定して、バリューを取り出します。キーには文字列かバイト配列、バリューにはバイナリデータを持ちます。

NoSQLはデータが大きくなったときの対策としてはスケールアウトが適しています。サーバのスペックを良くするスケールアップではなく、サーバの数を増やしてく方法です。リレーショナルデータベースよりも簡単にスケールアウトができる点が、キーバリュー型の利点です。リレーショナルデータベースはデータの関係性を厳密に扱うので、他のテーブルとの整合性をとるために排他制御をおこなったり、テーブル定義を変更する際の待受処理を別に追加するケースもあります。複数のサーバがネットワーク越しに、それぞれのデータの関係性を維持することはまったくもって簡単ではないことです。

それに対して、キーバリュー型はキーを指定するだけでバリューがわかるので、データの関係性を維持する必要がないです。関係性を維持する必要が無いということはサーバがどれだけ増えても、複数のサーバにデータを分割することが出来ます。

キーバリュー型でデータを分割するときに簡単な方法は、「シャーディング」です。キー1をサーバAに、キー2をサーバBに分割して格納することです。 - メリット - 簡単なこと - デメリット
- サーバがダウンしたらキーとバリューを両方失うことになる

デメリットに対する対策は、キーとバリューを複数のサーバに複製することがある。しかし、複数のキーとバリューがあると、すべてのバリューが更新されているかどうかがわからないので、サーバAにあるキー1とサーバBにあるキー1で違うバリューを持つ可能性がある。 このデメリットを解消するソリューションがないNoSQLだから単独のサーバで運用しているものや、一方でBigtableDynamoといった大規模分散型のNoSQLはデメリットを解消するような実装を持っている。

まとめ

  • キーバリュー型について学んだ
  • データモデルがキーとバリューで構成されていてシンプル
  • データが大きくなったらスケールアウトをしよう
  • データを分割するときに簡単なのはシャーディング
    • メリットは簡単なこと
    • デメリットはサーバがダウンするとキーとバリューの両方を失うことになる