APISplit store

Split store

Dispatches requests to up to 256 account and object stores. These stores may reside on different servers.

Instance creation

my $splitStore = CDS::SplitStore->new($key);
$splitStore->assignAccounts(0, 255, $store1);
$splitStore->assignObjects(0, 127, $store2);
$splitStore->assignObjects(128, 255, $store3);

Instantiates and configures a split store.

Store behavior

Each store request is cryptographically mapped onto a number from 0..255, and dispatched to the corresponding store.

For get, put, and book requests, the mapping is derived from the object hash:

object hash 255 store 0 key 117 Object stores

List and modify requests are mapped using the account hash:

account hash 255 store 0 key 156 Account stores

Key is a 32-byte sequence known to the store operator only, and used to encrypt the hash. This prevents outsiders from guessing the store to which an object or account is mapped. This additional encryption step also ensures that each slot will statistically get the same amount of objects and accounts.

Once the store is in use, the mapping must remain the same.

Garbage collection

Garbage must be collected on the split store as a whole. It is not possible to collect garbage on the individual stores separately. As of now, no tools are available for that.

The split store is currently only implemented in Perl.