(编辑:我错过了一些声誉创造bitcask标签等等...)如何使用bitcask作为独立
(TL;博士 => bitcask:获取/ 2不工作,引发bitcask_nifs中的badarg:keydir_get_int)
我想知道如何使用bitcask,而不用扯扯正确的方式。
首先,我是想这样的:
bitcask:put(Handle, 3, {this, is, data}).
bitcask:get(Handle, 3).
这两个电话提出同样的错误:使用Erlang badarg:尺寸/ 1
的问题是二郎:尺寸/ 1只接受二进制文件或元组。 所以我是想这样的:
bitcask:put(Handle, {thing, 3}, {this, is, data}).
bitcask:get(Handle, {thing, 3}).
新badarg错误,那么,使用Erlang:CRC32和价值我想商店。
所以现在我使用这段代码,bucket是注册gen_server的原子名称,它使句柄保持其状态。 cask_wrapper是geneseseries的代码。下面的代码是theese gen服务器的访问权限。
-module(sr_db).
...
get(Type, Key) when not is_binary(Key) ->
?MODULE:get(Type, term_to_binary(Key));
get(Type, Key) ->
Bucket = type2bucket(Type),
cask_wrapper:get(Bucket, {get, Key}).
put(Type, Key, Data) when not is_binary(Key) ->
?MODULE:put(Type, term_to_binary(Key), Data);
put(Type, Key, Data) when not is_binary(Data) ->
?MODULE:put(Type, Key, term_to_binary(Data));
put(Type, Key, Data) ->
Bucket = type2bucket(Type),
cask_wrapper:put(Bucket, Key, Data),
ok.
%% syncput(Type, Key, Data) -> call au lieu de cast
type2bucket(user) -> users_cask.
我用这个代码:
sr_db:get(user, 3).
%% then a call is made to cask_wrapper:get(users_cask, {get, 3}).
还有的cask_wrapper功能
get(Bucket, Key) ->
gen_server:call(Bucket, {get, Key}).
handle_call({get, Key}, _From, State) ->
Fetch = bitcask:get(State#state.handle, Key),
{reply, Fetch, State}.
我用认沽功能相同的机制。 (但是用gen_server:cast)
我的第一个问题是:正在做term_to_binary转换中每次调用 一个很好的做法,还是很慢?我将不得不将其转换回erlang 这个术语来表示我提取的值。
此刻,put操作返回'ok'。有用。但获得 操作不起作用。这是错误:
=ERROR REPORT==== 29-Jan-2012::20:21:24 ===
** Generic server users_cask terminating
** Last message in was {get,{get,<<131,97,3>>}}
** When Server state == {state,#Ref<0.0.0.353>}
** Reason for termination ==
** {badarg,[{bitcask_nifs,keydir_get_int,[<<>>,{get,<<131,97,3>>}]},
{bitcask_nifs,keydir_get,2},
{bitcask,get,3},
{cask_wrapper,handle_call,3},
{gen_server,handle_msg,5},
{proc_lib,init_p_do_apply,3}]}
Bitcask dir : "/home/niahoo/src/skyraiders/priv/bitcasks/users"
options : [read_write]** exception exit: {{badarg,
[{bitcask_nifs,keydir_get_int,
[<<>>,{get,<<131,97,3>>}]},
{bitcask_nifs,keydir_get,2},
{bitcask,get,3},
{cask_wrapper,handle_call,3},
{gen_server,handle_msg,5},
{proc_lib,init_p_do_apply,3}]},
{gen_server,call,[users_cask,{get,{get,<<131,97,3>>}}]}}
in function gen_server:call/2
我不明白为什么它不工作,并希望得到一些帮助。
谢谢
谢谢你的标签:) – niahoo 2012-01-31 15:25:12