Voldemortは、AmazonのDynamoを元にしたオープンソースの分散キーバリューストア。(リレーショナルデータベース(RDB)ではない)
Javaで作られているが、クライアント用にはC++とpythonのライブラリーも用意されているようだ。
|
|
|
|
このDB名を見た人は誰でも言っているので自分としては敢えて触れたくないのだが、やっぱり言いたくなる(笑)
名前を言ってはいけないあの人と絶対何か関係あるよな〜!
公式ページの上方に、関連するプロダクト一覧が出ているようなのだが、そこにもアズカバンとかノーバートとかあるし(爆)
VoldemortはJavaで動くので、事前にJDK1.6をインストールしておく。
VoldemortはUNIXを想定しているようで、起動用コマンド類もシェルしか用意されていないが、本体はJavaなのでWindowsでも動かせる。
ただしjavaコマンドを打つ必要があるので、起動用のバッチファイルを作っておく方が便利。
以下のバッチでは、java.exeへのパスが通っている前提。
@rem Voldemort起動バッチ by ひしだま 2010-06-12
@echo off
title Voldemort
setlocal
set base_dir=%~dp0
..
set CLASSPATH=%CLASSPATH%;%base_dir%/dist/*
set CLASSPATH=%CLASSPATH%;%base_dir%/lib/*
rem Hadoopのバージョンを実行環境に合わせる
if defined HADOOP_HOME (
set CLASSPATH=%CLASSPATH%;%HADOOP_HOME%/*
) else (
rem set CLASSPATH=%CLASSPATH%;%base_dir%/contrib/hadoop-store-builder/lib/*
set CLASSPATH=%CLASSPATH%;C:/cygwin/usr/local/hadoop-0.20.2/*
)
set CLASSPATH=%CLASSPATH%;%base_dir%/dist/resources
if not defined VOLD_OPTS (
set VOLD_OPTS=-Xmx1064M -Dcom.sun.management.jmxremote
)
if "%1"=="" (
set ARGS=%base_dir%/config/single_node_cluster
) else (
set ARGS=
)
echo on
java %VOLD_OPTS% -cp "%CLASSPATH%" voldemort.server.VoldemortServer %ARGS% %*
@echo off
pause
元のvoldemort-server.shでは、「VOLD_OPTS=-Xmx2G
-server -Dcom.sun.management.jmxremote
」という、(個人のPCで使うには)鬼のようなメモリーサイズが指定されている(汗)
メモリーが確保できないと、以下のようなエラーが出て、起動できない。
Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
また、実質的に1024MB以上のメモリーが確保できないと以下のようなメッセージが出て、動かない。
Exception in thread "main" java.lang.IllegalArgumentException: je.maxMemory has
a value of 1073741824 but the JVM is only configured for 1037959168. Consider using je.maxMemoryPercent.
at com.sleepycat.je.dbi.MemoryBudget.calcMaxMemory(MemoryBudget.java:627)
at com.sleepycat.je.dbi.MemoryBudget.<init>(MemoryBudget.java:580)
〜
1073741824 B=1048576 kB=1024 MB … たぶん必要な最低値
1037959168 B=1013632 kB≒ 989 MB … たぶん確保できた量(-Xmx1024Mを指定した場合)
なので、-Xmxに1024MBよりちょっと多い値を指定している。
また、-serverを付けていると以下のようなエラーが発生するので、外している。
Error: no `server' JVM at `C:\Program Files\Java\jre6\bin\server\jvm.dll'.
元のvoldermort-server.shではVM引数に「-Dlog4j.configuration=〜/log4j.properties
」があるのだが、クラスパスにdist/resourcesを指定しているので、VM引数は無くてもいい。[2010-06-05]
(dist/resources/log4j.propertiesが使われる)
Voldemortクライアントシェルを起動する為のバッチファイル。
@rem Voldemortクライアントシェル起動バッチ by ひしだま 2010-06-05
@echo off
setlocal
set base_dir=%~dp0
..
set CLASSPATH=%CLASSPATH%;%base_dir%/lib/*
set CLASSPATH=%CLASSPATH%;%base_dir%/dist/*
set CLASSPATH=%CLASSPATH%;%base_dir%/dist/resources
if not defined VOLD_OPTS (
set VOLD_OPTS= -Dcom.sun.management.jmxremote
)
set ARGS=jline.ConsoleRunner voldemort.VoldemortClientShell
java %VOLD_OPTS% -cp "%CLASSPATH%" %ARGS% %*
作業内容 | 実施コマンド | 備考 | |
---|---|---|---|
1 | Voldemortを起動する。 |
> cd C:\voldemort-0.80.2 > bin/voldemort-server.bat config/single_node_cluster/ |
コマンドプロンプトから起動バッチを実行する。 エクスプローラーから起動バッチをダブルクリックで直接実行してもいい。 |
2 | クライアントシェルを起動する。 |
> bin/voldemort-shell.bat test tcp://localhost:6666 Established connection to test via tcp://localhost:6666
|
コマンドプロンプトからシェル起動バッチを実行する。 「test」は、single_node_clusterにデフォルトで用意されているストア(テーブル)名。 |
ちょっと動作確認。 |
> put "hello" "world" > get "hello" version(0:1): "world" > delete "hello" > get "hello" null |
||
3 | クライアントシェルを終了する。 |
> exit k k thx bye. |
「k k」って何だろう…? |
4 | Voldemortを終了する。 | 起動したコマンドプロンプトのウィンドウを閉じるだけ。 |
Voldemortのデータモデル(テーブル構造)は、HBaseやCassandraのようなカラムファミリー型(列指向)と違って、本当に単なるキーバリューストア(key-value store)っぽい。
ストア(store)と呼ばれるテーブルがあって、キーを指定して値を入れるだけ。(単なるマップとほぼ同じ)
値はバージョン管理されるが、過去の履歴を取得することは出来ない。
えーっと、レコード(行)に相当するものも無いみたいだ…。
ストアはstores.xmlで事前に定義しておく必要がある。
ストア内のキーと値の型もそこで定義する。