tcerl
tcerlを試してみた。ソースを読みながら試行錯誤している段階なので、
おかしな使い方をしているところがある可能性が高いが、使用できた。
tcは、ハッシュ、B+木、固定長、の3種類のDBを提供しているが、
いままで調べた限りでは、tcerlではB+木だけを提供しているようだ。
ハッシュや固定長もあるとありがたいが、パフォーマンスを気にしなければB+木で
当座は事足りる。
-module(test). -compile(export_all). test()-> Filename="abc", tcerl:start(), {ok,Wr} = tcbdb:open(Filename,[writer,create,term_store]), tcbdb:vanish(Wr), put(Wr,{1,1.0},23), put(Wr,{1,1.0},24), put(Wr,{2,3.0},25), put(Wr,{2,3.0},25), put(Wr,{3,3.0},25), tcbdb:close(Wr), {ok,Rd} = tcbdb:open(Filename,[reader,term_store]), [23,24] = get(Rd,{1, 1.0}), [X1] = next(Rd,{1,1.0}), {2,3.0} = X1, [X2] = next(Rd,X1), {3,3.0} = X2, [] = next(Rd,X2). print(X,Y)-> io:format("~w ~w~n",[X,Y]). print(X)-> io:format("~w~n",[X]). next(R,K)-> map_t2b(tcbdb:next(R,term_to_binary(K))). put(R,K,V)-> tcbdb:put_dup( R, term_to_binary(K), term_to_binary(V)). map_t2b(XS)-> lists:map(fun(X)-> binary_to_term(X) end,XS). get(R,K)-> map_t2b(tcbdb:get(R,term_to_binary(K))).