RedisをWindowsにインストールしてVBAで使ってみようとした話
RedisというNoSQLデータストアがちょっぱや!な噂をどっかから聞いてみて、興味をもったので
ちょっくらつかってみっか、ついでにVBAで使えんかなという感じでRedisに触ってみました。
Redisとは
Redisとは、オープンソースのKVSのデータ構造を持つNoSQLデータストアです。
特徴としては、揮発性と格納する値はオブジェクトが挙げらます。
揮発性と言うのは、データが有る特定の手段を踏むと全部消えることです。
Redisでは、すべてのデータをメモリ上に持つため、インスタンスが終了すると全てのデータは消えてしまいます。
そのため、継続的にデータを保存ということは一切できません。
その代わり、HDDアクセスというボトルネックを一切持たないので、他のデータストアと比較しても非常に高速なアクセスが可能になっています。
ただし、データ永続化という機能があり、それを使うことで都度ディスクにデータを書き込みつつメモリでデータを持千鶴付けることが出来るようになっています。
それってただのオンメモリじゃ
格納する値はオブジェクト、と言うのは他のKVSだと基本的に何かしらの値を保存するのですが、
このRedisはハッシュ、配列、クラス等様々なオブジェクトを保存できます。
これはドキュメント指向データストアならできるのですが、KVSでこれが出来るものはあまりありません。
現在、VMWareがスポンサーとなっており、注目されつつあるデータストアです。
どう利用するか
この2つの特徴を考えると、継続的にデータを保存する用途ではなく、一時的なデータの置き場所と考えるのがベストです。
以前のNoSQLの記事でも書いたのですが、このNoSQLが更に極まった超汎用的データ構造クラスと思っています。
例えば、大量のデータを集計するがデータ構造を作るのは面倒臭い、だけどデータベース使うほどじゃない。
そんなシチュエーションは業務システムや集計プログラムだとよくあります。
こういった時に便利ではいでしょうか。
Windowsへのインストール手順
Redis公式ではありませんが、MSOpenTechがWindows版を作成しており、msi形式のインストーラもあったのでそれを使いました。
ウィザードに従ってポチポチやれば勝手にインストールが終わります。
インストール途中、環境変数を設定するという項目があるので忘れずにチェックしておいてください。
忘れると後が面倒臭いです。
起動
環境変数が通っていれば、コマンドプロンプトで
redis-server
とタイプするだけで起動します。
C:¥... > redis-server
もし、環境変数が通っていない場合はフルパスが必要です。
下はあくまで例なのでインストールパスに置き換えてください。
C:¥... >C:¥Program Files¥Redis¥redis-server
<>
余談ですが、 起動時のフラッシュがかっこいいなーと思いました
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のActiveRecordのWindows版というべきものがあり、
これを使うことで様々なDBに使用する側からは共通のインターフェースを通してアクセスができるようになっています。
これはDBのベンダー側等が各DBMSのODBCドライバを準備することことで利用可能になるのですが、このRedisはそのODBCドライバがありません。
ありません。
ありません。
え〜そんなバカな…
またネタを挟んでしまってすみません
ODBCはRDBを前提としたものではく、あくまでインターフェースなので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
基本的にODBCはSQLが使えそうなデータ構造のみ、と考えた方が良さそうです。
上のNoSQLという事情があってODBCドライバがないんでしょうかね。
まとめ
ということで自分でライブラリを作っていかないと利用できなさそうです。
ただ、今までDBコネクションとかはライブラリ頼りだったので、内部的にどう接続しているかサッパリ。
まずはそこから始めないといけなさそうです。
あとがき
とりあえず次回、DBサーバーにどうアクセスしているのかを調べるところからやっていきます。
参考文献・サイト
入門 : Redis のデータ構造と概念 — Redis Documentation (Japanese Translation)