読者です 読者をやめる 読者になる 読者になる

Blank?=False

「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々

RedisをWindowsにインストールしてVBAで使ってみようとした話

f:id:stonebeach-dakar:20161204184825p:plain RedisというNoSQLデータストアがちょっぱや!な噂をどっかから聞いてみて、興味をもったので ちょっくらつかってみっか、ついでにVBAで使えんかなという感じでRedisに触ってみました。

Redisとは

Redisとは、オープンソースのKVSのデータ構造を持つNoSQLデータストアです。
特徴としては、揮発性格納する値はオブジェクトが挙げらます。

揮発性と言うのは、データが有る特定の手段を踏むと全部消えることです。
Redisでは、すべてのデータをメモリ上に持つため、インスタンスが終了すると全てのデータは消えてしまいます。
そのため、継続的にデータを保存ということは一切できません。
その代わり、HDDアクセスというボトルネックを一切持たないので、他のデータストアと比較しても非常に高速なアクセスが可能になっています。

ただし、データ永続化という機能があり、それを使うことで都度ディスクにデータを書き込みつつメモリでデータを持千鶴付けることが出来るようになっています。
それってただのオンメモリじゃ

格納する値はオブジェクト、と言うのは他のKVSだと基本的に何かしらの値を保存するのですが、 このRedisはハッシュ、配列、クラス等様々なオブジェクトを保存できます。

これはドキュメント指向データストアならできるのですが、KVSでこれが出来るものはあまりありません。

現在、VMWareがスポンサーとなっており、注目されつつあるデータストアです。

どう利用するか

この2つの特徴を考えると、継続的にデータを保存する用途ではなく、一時的なデータの置き場所と考えるのがベストです。
以前のNoSQLの記事でも書いたのですが、このNoSQLが更に極まった超汎用的データ構造クラスと思っています。

例えば、大量のデータを集計するがデータ構造を作るのは面倒臭い、だけどデータベース使うほどじゃない。
そんなシチュエーションは業務システムや集計プログラムだとよくあります。
こういった時に便利ではいでしょうか。

Windowsへのインストール手順

Redis公式ではありませんが、MSOpenTechがWindows版を作成しており、msi形式のインストーラもあったのでそれを使いました。

github.com


ウィザードに従ってポチポチやれば勝手にインストールが終わります。
f:id:stonebeach-dakar:20161204185929p:plain

インストール途中、環境変数を設定するという項目があるので忘れずにチェックしておいてください。
忘れると後が面倒臭いです。
f:id:stonebeach-dakar:20161204185214p:plain

起動

環境変数が通っていれば、コマンドプロンプト
redis-server
とタイプするだけで起動します。

C:¥... > redis-server

もし、環境変数が通っていない場合はフルパスが必要です。
下はあくまで例なのでインストールパスに置き換えてください。

C:¥... >C:¥Program Files¥Redis¥redis-server

<> 余談ですが、 起動時のフラッシュがかっこいいなーと思いました
f:id:stonebeach-dakar:20161204185231p:plain

Redisの基本操作

コンソールに入る

C:¥...> redis-cli

これまた環境変数が通ってないければフルパスで入力する必要があります。

データ追加

127.0.0.1:6379> set foo bar
OK

データ取得

127.0.0.1:6379> get foo
"bar"

データの複数追加

127.0.0.1:6379> mset a 10 b 20 c 30
OK

データの複数取得

127.0.0.1:6379> mget a b c
1) "10"
2) "20"
3) "30"

指定キーが存在するか

127.0.0.1:6379> exists foo
(integer) 1
127.0.0.1:6379> exists bar
(integer) 0

データ削除

127.0.0.1:6379> del foo
(integer) 1
127.0.0.1:6379> get foo
(nil)

コンソール終了

他のDBMSと同じようにexitで終了出来ます。

127.0.0.1:6379> exit

Redisサーバー終了

cmdを管理者権限で入る必要があります。

C:¥>sc stop redis

VBAで利用する方法

情報などない

はっきり言おう、英語でちょっと軽くググったらVBAでRedisを使う情報等なかった。
そりゃそうだ、こんな使い方する人はそうそういないだろう。
超マイナーじゃないけどマイナーかなと思うデータストアだし・・・

ODBCが使えない

WindowsにはODBCと言う、RubyOnRailsのActiveRecordWindows版というべきものがあり、 これを使うことで様々なDBに使用する側からは共通のインターフェースを通してアクセスができるようになっています。

これはDBのベンダー側等が各DBMSODBCドライバを準備することことで利用可能になるのですが、このRedisはそのODBCドライバがありません。

ありません。

ありません。

え〜そんなバカな…

f:id:stonebeach-dakar:20161204185349j:plain またネタを挟んでしまってすみません


ODBCRDBを前提としたものではく、あくまでインターフェースなのでCSVファイルの読み込みも対応する。
という話なのですが、CSVはデータの内部構造そのものに近いものなので、テーブル化さえしてしまえばSQLは容易にかけられるから、だと思います。
データ構造にKVSを採用しているRedisはそもそもRDBと全く違うものなので、ODBCは利用できないんじゃないかな〜と考えています。

ただし、ドキュメント指向NoSQLのMongoDBはODBCドライバがありました。
http://itpro.nikkeibp.co.jp/atcl/news/14/072300184/?rt=nocnt
これは、ドキュメント指向のおかげで内部的のデータ構造がSQLでも問い合わせできそうになっていたから、なのかなと思います。

多分、一度2次元データモデルに変換してるんじゃないかなとは思いますが…。

GoogleのフォーラムでもRDBじゃないからODBCは無理だよ!?という記事がありました。
https://groups.google.com/forum/#!topic/redis-db/qZ8rMU6CtU8 基本的にODBCSQLが使えそうなデータ構造のみ、と考えた方が良さそうです。

上のNoSQLという事情があってODBCドライバがないんでしょうかね。

まとめ

ということで自分でライブラリを作っていかないと利用できなさそうです。
ただ、今までDBコネクションとかはライブラリ頼りだったので、内部的にどう接続しているかサッパリ。
まずはそこから始めないといけなさそうです。

あとがき

とりあえず次回、DBサーバーにどうアクセスしているのかを調べるところからやっていきます。

参考文献・サイト

ameblo.jp

入門 : Redis のデータ構造と概念 — Redis Documentation (Japanese Translation)

qiita.com

promamo.com