Skip to main content
Version: 2.2.6

Buckets

Buckets are used to define a virtual keyspace for storing Riak objects. They enable you to define non-default configurations over that keyspace concerning replication properties and other parameters.

In certain respects, buckets can be compared to tables in relational databases or folders in filesystems, respectively. From the standpoint of performance, buckets with default configurations are essentially "free," while non-default configurations, defined using bucket types, will be gossiped around [the ring][glossary read rep] using Riak's cluster metadata subsystem.

Configuration​

Bucket configurations are defined using bucket types, which enables you to create and modify sets of configurations and apply them to as many buckets as you wish. With bucket types, you can configure the following bucket-level parameters, overriding the default values if you wish.

allow_mult​

Determines whether sibling values can be created. See siblings. The default can be true or false depending on the context. See the documentation on allow_mult for more information.

n_val​

Specifies the number of copies of each object to be stored in the cluster. See the documentation on replication properties. Default: 3.

last_write_wins​

Indicates if an object's timestamp will be used to decide the canonical write in the case of a conflict. See the documentation on vector clocks and on conflict resolution for more information. Default: false.

r, pr, w, dw, pw, rw, notfound_ok, basic_quorum​

See the documentation on replication properties for more information on all of these properties.

precommit​

A list of Erlang functions to be executed before writing an object. See our documentation on pre-commit hooks for more information. Default: no pre-commit hooks, i.e. an empty list.

postcommit​

A list of Erlang functions to be executed after writing an object. See our documentation on pre-commit hooks for more information. Default: no post-commit hooks, i.e. an empty list.

old_vclock, young_vclock, small_vclock, big_vclock​

These settings enable you to manage vector clock pruning.

backend​

If you are using the Multi backend, this property enables you to determine which of Riak's available backends---Bitcask, LevelDB, or Memory---will be used in buckets of this type. If you are using LevelDB, Bitcask, or the Memory backend at a cluster-wide level, all buckets of all types will use the assigned backend.

consistent​

If you are using Riak's experimental strong consistency feature for buckets bearing a type, this setting must be set to true. The default is false. More information can be found in our documentation on using strong consistency.

datatype​

If you are using Riak data types, this setting determines which data type will be used in buckets of this bucket type. Possible values: counter, set, or map.

dvv_enabled​

Whether dotted version vectors will be used instead of traditional vector clocks for conflict resolution. Default: false.

chash_keyfun, linkfun​

These settings involve features that have been deprecated. You will not need to adjust these values.

Fetching Bucket Properties​

If you'd like to see how a particular bucket has been configured, you can do so using our official client libraries or through Riak's HTTP API. The following would fetch the properties for the bucket animals if that bucket had a default configuration, i.e. the default bucket type:

Namespace animalsBucket = new Namespace("animals");
FetchBucketProperties fetchProps =
new FetchBucketProperties.Builder(animalsBucket).build();
FetchBucketProperties.Response response = client.execute(fetchProps);
BucketProperties props = response.getProperties();

If the bucket animals had a different type that you had created and activated, e.g. my_custom_type, you could fetch the bucket properties like so:

Namespace customTypedBucket = new Namespace("my_custom_type", "animals");
FetchBucketProperties fetchProps =
new FetchBucketProperties.Builder(customTypedBucket).build();
FetchBucketProperties.Response response = client.execute(fetchProps);
BucketProperties props = response.getProperties();