KVS

KVSとは?基礎をわかりやすく解説します【ハンズオンあり】

KVSとは?基礎をわかりやすく解説します【ハンズオンあり】
KVSって何?DBのこと??
KVSに入門したいけど何から勉強すればいいか分からない。。

 

今回はこういった方向け。

KVSの基礎知識を解説します。

 

また、Dockerを使ってKVS(Redis)をハンズオン形式で触るコーナーも用意しているので、最後まで読んで頂けると幸いです。

KVSとは何か?【KVSの基礎知識】

KVSとはKey-Value storeの略で、NoSQL(Not only SQL:SQLを使わずにデータを保存するデータベース)の一種です。

 

一般にDB(データベース)というと、RDB(リレーショナルデータベース)を指すことが多いですが、NoSQLはRDBとは明確に異なるものです。

関係性を表にすると以下のようになります。

データベースの種類の図

 

ちなみに、DBには他にも「階層型」や「ネットワーク型」などがあります。

また、NoSQLも同様にKVS以外にも様々な種類があります

 

また、RDBの場合はSQLを使ってデータ操作(取得・登録・更新・削除)を行いますが、KVSの場合はSQLは使いません。

名前(key-value store)の通り、keyに対応するvalueを保存しているだけの単純な構造をしているため、keyを使ってデータ操作を行うだけです。

kvsの図

 

その意味では、RDBよりは仕組みを理解しやすいとも言えるでしょう。

 

関連記事:SQLの基礎の基礎の基礎についてまとめてみた【初心者向け】

 

KVSのメリットについて

KVSの主なメリットは以下です。

  • 外部通信の負担を減らすことができる
  • 高速にデータを読み書きすることができる
  • シンプルな仕組みなので理解しやすい

 

外部通信の負担を減らすことができる

一般的なアプリの場合、DBサーバーや外部APIにアクセスすることも多いです。

 

そのときに、毎回それらにアクセスしていては、DBサーバーや外部APIの負荷が上がってしまいます。

特にDBサーバーの場合は、毎回重いクエリを投げてしまうとCPU負荷が上昇し障害に繋がる可能性もあるでしょう。

 

このような状況でKVSを使ってクエリの結果を保存しておけば、重いクエリを毎回実行する必要がないため、DBに対する負荷を軽減することができます。

 

要は、KVSが外部通信に対する緩衝材のような役割を果たせるのです。

 

こちらの記事にある「クエリキャッシュサーバー」に似た役割をKVSが果たせるということです

 

高速にデータを読み書きすることができる

KVSの中でもRedisなどは「インメモリ型」のKVSです。

つまり、メインメモリ上で保存したデータを管理しています。

 

そのため、RDBのようにDBサーバーにアクセスするよりも高速にデータ操作を行うことが可能です。

 

データの取得速度が上がるということは、Webサイトの場合、「ページの表示速度」も向上するということです。

ページの表示速度は広告収益に直結する要素の一つでもあるため、ビジネスの収益的にもKVSを使うメリットは大きいと言えるでしょう。

 

シンプルな仕組みなので理解しやすい

KVSは「keyとvalueでデータを管理する」というシンプルな構造なので、非常に理解しやすいです。

SQLのように複雑なクエリを書く必要もないため、非常に勉強しやすいと言えるでしょう。

 

KVSのデメリットについて

KVSのデメリットについてもまとめてみます。

  • コンテンツが即座に更新されない可能性がある
  • 実装が複雑になる可能性がある
  • 大容量のデータは扱えない

コンテンツが即座に更新されない可能性がある

KVSを使ってRDBから取得したデータを一定時間保存(キャッシュ)している場合、DBを更新してもコンテンツには即座に反映されない可能性があります。

 

また、気を付けないといけないのは、「HTMLをキャッシュしている場合」です。

 

例えば、Webページのデザインを変更したくて、HTMLとCSSを更新したとしましょう。

 

この場合、HTMLとCSSをリリースすると、CSSは即座に新規のコードが反映されます。

 

しかし、HTMLはKVSが保存しているため、以前の状態のままです。

そのため、HTMLとCSSのコードがマッチせずにデザイン崩れが生じる可能性があります。

 

もちろん、「HTMLをキャッシュする」というのは極端な例かもしれませんが、このような事故を招く可能性もあるため、「KVSにどんなデータを保存するか」はしっかりと考える必要があるでしょう。

 

実装が複雑になる可能性がある

KVSにデータを保存するということは、その処理を実装する必要があります。

そのため、場合によってはコードの行数が増えて可読性が低下したり、テストが複雑になる可能性もあるでしょう。

 

大容量のデータは扱えない

KVSの中でも例えばRedisなどはメモリ上で動作するため、気を付けないと大量にメモリを消費してしまう可能性があります。

 

そのため、大容量のデータを一度に取り扱うような処理はKVSでは行えません。

 

その辺りは若干の不便さがあるとも言えるでしょう。

 

もちろん、その辺りの不便さを補うためにRDB等の多様なDBがあるのですが。。

 

KVSの種類について

KVSの代表的なものとしては、以下があります。

  • Redis
  • Memchached

 

ざっくり説明すると、Memchachedはシンプルな作りになっていて、Redisはより豊富な機能を揃えています。

 

詳しい比較は以下の記事が参考になるでしょう。

 

また、最近ではAWSやGCP等のクラウドベンダーもKVSのサービスを提供しています。

 

KVSを実際に触ってみよう【ハンズオン】

今回は、DockerのRedisコンテナを使って実際にKVS(Redis)を触ってみます。

 

最初に、Dockerをインストールしていない方はこちらからインストールを行ってください。

 

インストールが完了したら、以下のコマンドをターミナルで実行して下さい。

docker run --name redis-sample -d redis

 

これでDocker HubからRedisのイメージをpullし、なおかつ「redis-sample」という名前でコンテナも立ち上げることができます。

 

次に以下のコマンドで、作成したredis-sampleコンテナ内に入ります。

docker exec -it redis-sample bash

 

redis-sampleコンテナに入ったら、以下のコマンドでredis-cliを起動します。

redis-cliはCLIでRedisを操作するためのツールです
redis-cli

 

redis-cliコマンド

 

この状態で、Redisに対してデータ操作(登録・更新・削除)を行ってみます。

 

まずはデータの登録です。以下のコマンド値をセットして下さい。

set testkey testvalue

 

valueはsetコマンドでセットできます。(setは大文字でも小文字でも同様に動作します)

testkeyがkeyで、testvalueがvalueです。

 

以下のようにOKと出力されたら登録処理は成功です。

redis-cliのsetコマンド

 

この値が実際に登録できているかを確認してみましょう。

以下のコマンドを実行して下さい。

get testkey

 

「get key名」でvalueを取得できます。

 

valueが登録されていることを確認できました。

redis-cliのgetコマンド

 

次に、この値を更新してみます。

 

更新は再度同じkeyで値をセットすればOKです。

以下のコマンドを実行して下さい。

set testkey testvalueupdate
redis-cliのsetコマンドで更新

 

以下のように更新できていることが確認できます。

redis-cliのgetコマンドで更新できていることを確認

 

次に、データの削除を行います。

 

データの削除はdelコマンドを使います。

以下のコマンドを実行して下さい。

del testkey
redis-cliのdelコマンドでデータの削除

 

データが削除されていることが確認できます。

redis-cliのgetコマンドでデータが削除されていることを確認

 

最後に、その他のredis-cliを使った操作をご紹介します。

 

まずはkeyの一覧を表示するコマンドです。

keyの一覧を確認するには、以下のコマンドを実行します。

keys *

 

データが登録してある場合、以下のようにkeyの一覧を確認できます。

redis-cliのkeysコマンドでkeyの一覧を表示

 

最後に、全てのデータを削除したい場合です。

この場合は、以下のコマンドを実行します。

flushall
redis-cliのflushallコマンドでデータを全て削除

 

全てのデータを削除することができました。

redis-cliのkeysコマンドでデータが削除されていることを確認

 

flushallは本番環境では無邪気に使わないようにして下さい。。

 

ハンズオンは以上です。

 

Redisではこのようにredis-cliを使って簡単にデータの操作や確認を行うことができます。

今回紹介した以外にも様々な便利なコマンドが用意されているので、ぜひ調べて使ってみて下さい!

 

KVSとは?基礎をわかりやすく解説します:おわりに

今回は、KVSの基礎をご紹介しつつ、最後には実際のKVS(Redis)のデータ操作をしてみました。

少しでもKVSに対する理解を深めることができていたら幸いです。

 

最後まで読んで頂きありがとうございました。

 

こちらの記事もおすすめです

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA