Ubuntu/LinuxMintのDocker環境でKey Value Databaseを調べました ( mongoDB / Redis )

1.概要

NoSQLデータベースの中で、以前テストしたことがある「MongoDB」と、メモリベースで高速な「Redis」をDocker環境で動かし、その特徴を調査しました。実際に手を動かしてみることで、データの扱われ方や効率的な使い方のヒントが見えてきました。
調査内容はMongoDBとRedisです。これらは従来のRDB(関係データベース)とは異なり、複雑なテーブル結合(JOIN)などの処理がないため、非常に高速に動作します。しかし、項目間の関連性を持たせにくいため、複雑なデータ構造を扱う場合はアプリケーション側での処理負担が増えそうだと感じています。

2.詳細

(1) Key Value DatabaseのmongoDB

最低限の動作試験を目指します。

(a) docker-compolse.yml

以下のようにdocker-compose.ymlを作成します

version: '3.8'

services:
  mongo:
    image: mongo:latest
    container_name: mongo-container
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    ports:
      - "27017:27017"

(b) 起動

$ docker-compose up -d

(c) containerにloginして、mongoを操作します。

コンテナにログイン後、新しいツールである mongosh を使ってテストデータ(テーブル/コレクション)を作成し、データの保存と読み出しを行います。
雰囲気的には、JSON形式のデータを保存しているだけのように見えます。

$ docker exec --user root -it mongo-container
# mongosh -u root -p example
> db.testtable.insert({ubuntu:"20.04"})
{
  acknowledged: true,
  insertedIds: { '0': ObjectId('67304cbacb80b9a2c6fe6911') }
}
> db.testtable.find()
[ { _id: ObjectId('67304cbacb80b9a2c6fe6911'), ubuntu: '20.04' } ]
> exit
# exit

(2) Key Value DatabaseのRedis

Key Value DatabaseのRedisをネットで情報を見つけて、動かしてみました。Redisはmemory baseのKey Value Databaseなので、Disk上にどのように保管されるかも気になりました。この内容を記述します。

Docker環境で試験をしました。Base環境はUbuntu-20.04.6です。DockerはUbuntu標準を利用しました。
Docker-hubを参照して、Redis 7.4.1を選択して試験しました。

(a) docker-compose.yml

docker-compose.ymlを以下のように設定しました

version: '3.1'
services:
  redis:
    image: redis:7.4.1
    container_name: redis-container

(b) container起動

$ docker-compose up -d

(c) containerへloginと簡単な試験

$ docker exec --user root -it redis-container /bin/bash

# redis-cli
> set ubuntu 20.04
OK
> get ubuntu
"20.04"
> exit
# redis-cli bgsave
# ls
dump.rdb

dump.rdb がバックアップファイルのようです。

# exit
$ docker-compose stop
$ docker-compose up -d
$ docker exec --user root -it redis-container /bin/bash
# redis-cli
> set ubuntu 20.04
OK

dump.rdsから起動時に復元されるようです

3.所見

Key Value databaseはキーと値がセットなので高速アクセスを期待できます。しかし、RDBなどのように関連性でデータを呼び出すことが難しいので使い方が難しいと感じています。速度優先の処理に活用するのが良い気がします。

参考

[本ブログ内参照]
ARM64のubuntu-arm64をKVMで動作にチャレンジ
[外部サイト参照]
mongo
redis

コメント