hanoidb/src/hanoidb.hrl

91 lines
3.4 KiB
Erlang
Raw Normal View History

%% ----------------------------------------------------------------------------
%%
2012-05-07 15:22:55 +00:00
%% hanoidb: LSM-trees (Log-Structured Merge Trees) Indexed Storage
%%
%% Copyright 2011-2012 (c) Trifork A/S. All Rights Reserved.
%% http://trifork.com/ info@trifork.com
%%
%% Copyright 2012 (c) Basho Technologies, Inc. All Rights Reserved.
%% http://basho.com/ info@basho.com
%%
%% This file is provided to you under the Apache License, Version 2.0 (the
%% "License"); you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
%% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
%% License for the specific language governing permissions and limitations
%% under the License.
%%
%% ----------------------------------------------------------------------------
%% smallest levels are 256 entries
-define(TOP_LEVEL, 8).
2012-01-20 09:09:54 +00:00
-define(BTREE_SIZE(Level), (1 bsl (Level))).
-define(FILE_FORMAT, <<"HAN2">>).
2012-06-25 06:22:02 +00:00
-define(FIRST_BLOCK_POS, byte_size(?FILE_FORMAT)).
-define(TOMBSTONE, 'deleted').
-define(KEY_IN_FROM_RANGE(Key,Range),
2012-05-07 15:22:55 +00:00
((Range#key_range.from_inclusive andalso
(Range#key_range.from_key =< Key))
orelse
2012-05-07 15:22:55 +00:00
(Range#key_range.from_key < Key))).
-define(KEY_IN_TO_RANGE(Key,Range),
2012-05-07 15:22:55 +00:00
((Range#key_range.to_key == undefined)
orelse
2012-05-07 15:22:55 +00:00
((Range#key_range.to_inclusive andalso
(Key =< Range#key_range.to_key))
orelse
2012-05-07 15:22:55 +00:00
(Key < Range#key_range.to_key)))).
-define(KEY_IN_RANGE(Key,Range),
2012-01-23 09:41:03 +00:00
(?KEY_IN_FROM_RANGE(Key,Range) andalso ?KEY_IN_TO_RANGE(Key,Range))).
-record(nursery, { log_file :: file:fd(),
dir :: string(),
cache :: gb_trees:tree(binary(), binary()),
total_size=0 :: integer(),
count=0 :: integer(),
last_sync=now() :: erlang:timestamp(),
max_level :: integer(),
config=[] :: [{atom(), term()}],
step=0 :: integer(),
merge_done=0 :: integer()}).
-type kventry() :: { key(), expvalue() } | [ kventry() ].
-type key() :: binary().
-type txspec() :: { delete, key() } | { put, key(), value() }.
-type value() :: ?TOMBSTONE | binary().
-type expiry() :: infinity | integer().
-type filepos() :: { non_neg_integer(), non_neg_integer() }.
-type expvalue() :: { value(), expiry() }
| value()
| filepos().
-ifdef(USE_SCALABLE_BLOOM).
-define(BLOOM_NEW(Size), {ok, hanoidb_bloom:bloom(Size, 0.01)}).
-define(BLOOM_TO_BIN(Bloom), hanoidb_bloom:encode(Bloom)). %% -> Binary
-define(BIN_TO_BLOOM(Bin), {ok, hanoidb_bloom:decode(Bin)}).
-define(BLOOM_INSERT(Bloom, Key), {ok, hanoidb_bloom:add(Key,Bloom)}).
-define(BLOOM_CONTAINS(Bloom, Key), hanoidb_bloom:member(Bloom, Key)). %% -> 'true' | 'false'
-else.
-define(BLOOM_NEW(Size), begin ebloom:new(Size, 0.01, Size) end).
-define(BLOOM_TO_BIN(Bloom), begin ebloom:serialize(Bloom) end). %% -> Binary
-define(BIN_TO_BLOOM(Bin), begin ebloom:deserialize(Bin) end).
-define(BLOOM_INSERT(Bloom, Key), begin ok=ebloom:insert(Bloom, Key), {ok, Bloom} end).
-define(BLOOM_CONTAINS(Bloom, Key), begin ebloom:member(Bloom, Key) end). %% -> 'true' | 'false'
-endif.