Great product and fast, beware of deletes!
Overall Satisfaction with Riak
- Riak is great at handling large volumes of requests. We've seen Riak perform well under large volume while keeping response times quite low.
- Riak is also fast providing consistent sub 10ms reads in both the datacenter and cloud.
- Flexible allowing storage of numerous data types. We heavily leverage this to store various JSON documents in a single bucket.
- We really like the RESTful interface that is provided. Makes the learning curve almost invisible and provides a quick speed to market in using Riak.
- Deletes!!! We've seen on numerous occasions where Riak has "resurrected" deleted data. We've worked with Basho numerous times and tried multiple changes to the way we interact with Riak to prevent the problem but it still remains. The deletes seem to reappear weeks, even months, after the delete was issued. We've had to work around this issue by providing a "deleted" flag for all data objects stored in Riak. Thus, we do no delete but simply flip the flag. Excess baggage we would really like to not have to worry about.
- Search. Currently there's no way to tell what data you have in Riak without already knowing a particular bucket/key. There is a way to list the keys for a given bucket but due to performance implications, this is not a viable method to lookup data. Especially when you have a large amount of keys in the bucket.
- It provided a solution for use to securely write data to the cloud. This has been instrumental in allowing us to move more applications to the cloud. Writes are performed behind firewalls and then replicated to the cloud for application consumption. By moving more applications to the cloud, we free up internal resources and can serve information in a much more scalable and reliable way.
Riak is well suited as a key value store. It does exactly what it says it does. If you have well known buckets/keys, Riak is a great solution for a ton of different use cases. The lack of ability to search is somewhat problematic for other use cases requiring this ability.
Also, while the ability to store a variable array of data into a single bucket/key is extremely useful, if you have a use case requiring parts of that value to be updated independently, Riak does not support transactions so you open yourself up to contention issues if the data is being updated regularly in small portions. One solution to this is to use multiple bucket/key parts to store the data, which will remove the contention issue, but then you have to increase your Riak footprint which results in more buckets and can sometimes make things more difficult than needed. This has been a nagging issue we've had to deal with on multiple occasions.