The introduction of Write Once Buckets allows users to experience up to a 2x performance improvement for write-heavy write-once workloads. More details on implementing Write Once Buckets are available below.
Riak 2.1.0 introduces the concept of Write Once Buckets, buckets whose entries are intended to be written exactly once and never updated or overwritten. Since objects are intended to only be written once, Riak does not perform the usual “get, merge, update” cycle which reduces IOPs and improves throughput and latency.
It is still possible for multiple entries to be written to a single key -- through mis-use of the API, network partitions, simultaneous writes, etc.. In these cases, Riak will always resolve siblings using an algorithm based on the SHA-1 hashes of the conflicting objects. While this algorithm is repeatable and deterministic at the database level, it will have the appearance to the user of “random write wins”.
The write_once
property is a boolean value applied to a bucket type and may only be set at bucket creation time. Once a bucket type has been set and activated with the write_once
property, the property may not be modified
Limitations:
- Pre/Post-commit hooks are not supported.
- Large object warnings and limits are not enforced.
- All nodes must be upgraded before enabling
write_once
- usage in mixed clusters will crash vnodes.
-
Issue kv679 - Applies fix to most causes of data loss from repeated causal history. A monotonic counter is fsynced to disk when the vnode starts. Thus starting/re-starting a vnode has a cost associated that was not there before.
-
Update API to retrieve active preflist based on particular bucket/key. Updates the Riak API with an operation to GET, e.g.
/types/Type/buckets/Bucket/keys/Key/preflist
, an annotated (nodes being primary or fallback) preflist of which nodes host a particular bucket/key combination is returned. -
Add a JSON writer for several riak-admin commands, including cluster status, cluster partition[s], cluster partition-count, any of the riak-admin handoff commands, and riak-admin set/show/describe.
-
Integrate performance patches into Erlang R16 VM used by Riak.
-
Add riak_core_ring_manager:is_stable_ring/0 to public API. Allows clients to ensure that the ring has not changed in X seconds (currently 90).
-
yokozuna/issues/468 - Add
search_query_latency_mean
andsearch_index_latency_mean
metrics.
-
yokozuna/issues/437: Timeouts during bulk data load, possible tie in to yz_events crash and a bad state on core create.
-
yokozuna/issues/452: Don't delete siblings in YZ when using SC or CRDTs.
-
yokozuna/issues/402: Creating a new search index via HTTP responds before the index is available.
-
yokozuna/issues/450: AAE Failing hourly, with exit value {badarg,46}, [{base64,decode_binary[{base64.erl…
-
yokozuna/issues/437: yz_events:handle_info called with bad arguments.
-
yokozuna/issues/469: Fix YZ stats name typo from throughput to throughput.
-
riak_core/issues/698: SSL connections from peers with matching wildcard name are always rejected.
- yokozuna/issues/481 - Search loses entries when Search AAE trees expire. We are currently investigating this issue.
- riak/issues/727 - Users upgrading from 1.4.x to 2.1.x that choose to use the traditional
app.config
for configuration should be aware that the default settings forallow_mult
anddvv_enabled
have changed fromfalse
totrue
between these versions. If your application depends on these being set to 'false', you must explicitly define this by adding{default_bucket_props, [{allow_mult, false}, {dvv_enabled, false}]},
to theriak_core
section of yourapp.config
file to maintain backwards compatibility.
- Write Once Buckets
- If you make use of Write Once Buckets, you must upgrade all of your Riak nodes in a cluster to 2.1.0. There is no support for Write Once Buckets in a cluster with mixed Riak versions.
- Pre/Post-commit hooks are not supported.
- Large object warnings and limits are not enforced