NAME

RocksDB::MergeOperator - rocksdb::MergeOperator object

SYNOPSIS

use RocksDB;

my $handler = MyMergeOperator->new;
my $db = RocksDB->new('/path/to/db', {
    merge_operator => RocksDB::MergeOperator->new($handler),
});

DESCRIPTION

RocksDB::MergeOperator is a utility class to make a rocksdb::MergeOperator object.

CONSTRUCTOR

RocksDB::MergeOperator->new($handler :Object) :RocksDB::MergeOperator

Create and return a new RocksDB::MergeOperator object.

The $handler must respond to 'full_merge' and 'partial_merge'.

See 'HANDLER METHODS' section for more details.

HANDLER METHODS

$handler->full_merge($key :Str, $existing_value :Maybe[Str], $operand_list :ArrayRef[Str]) :Str

Gives the client a way to express the read -> modify -> write semantics

$key: The key that's associated with this merge operation. Client could multiplex the merge operator based on it if the key space is partitioned and different subspaces refer to different types of data which have different merge operation semantics

$existing_value: undef indicates that the key does not exist before this op

$operand_list: the sequence of merge operations to apply.

Client is responsible for returning the merge result here.

All values passed in will be client-specific values. So if this method raises an error, it is because client specified bad data or there was internal corruption. This will be treated as an error by the library.

$handler->partial_merge($key :Str, $left_operand :Str, $right_operand :Str) :Str

This function performs merge($left_operand, $right_operand) when both the operands are themselves merge operation types that you would have passed to a $db->merge() call in the same order (i.e.: $db->merge($key,$left_op), followed by $db->merge($key,$right_op)).

PartialMerge should combine them into a single merge operation that is saved return value. Return value should be constructed such that a call to $db->merge($key, $new_value) would yield the same result as a call to $db->merge($key, $left_op) followed by $db->merge($key, $right_op).

If it is impossible or infeasible to combine the two operations, raise an error (die). The library will internally keep track of the operations, and apply them in the correct order once a base-value (a Put/Delete/End-of-Database) is seen.

SEE ALSO

RocksDB, RocksDB::AssociativeMergeOperator

AUTHOR

Jiro Nishiguchi <jiro@cpan.org>