We have a service that currently runs on top of a MySQL database and uses JBoss Application Server to run the application. The rate of the database growth is accelerating and I am looking to change the setup to improve scaling. The issue is not in a large number of rows nor (yet) a particularly high volume of queries but rather in the large number of BLOBs stored in the db. Particularly the time it takes to create or restore a backup (we use mysqldump and Percona Xtrabackup is a concern as well as the fact that we will need to scale horizontally to keep expanding the disk space in the future. At the moment the db size is around 500GB.

The kind of arrangement that I figure would work well for our future needs is a hybrid database that uses both MySQL and some key-value database. The latter would only store the BLOBs. The meta data as well as data for user management and business logic of the application would remain in the MySQL db and benefit from structured tables and full consistency. The application itself would handle the issue of consistency between the databases.

The question is which database to use? There are lots of NoSQL databases to choose from. Here are some points on what qualities I am looking for:

- Distributed over multiple nodes, which are flexible to add or remove.
- Redundancy of storage, with the database automatically making sure each value object is stored on at least two different nodes.
- Value objects' size could range from a few dozen bytes to around 100MB.
- The database is accessed from a java EJB application on top of JBoss AS as well as a program written in C++ that processes the data in the db. Some sort of connector for each would be needed.
- No need for structure for the data. A single string or even just a large integer would suffice for the key, pure byte array for the value.
- No updates for the value objects are needed, only inserts and deletes. If a particular object is made obsolete by a new object that fulfils the same role, the old object is deleted and a new object with a new key is inserted.

Having looked around a bit, Riak sounds good except for its problems with storing large value objects. Which database would you recommend?