1) Cassandra. Базовая функциональность - т.е. запись/чтение данных и поиск по индексу работает замечательно. А вот с "наворотами" есть проблемы:
- при добавлении сервера в кластер cassandra начинает копировать на него недостающие данные с других серверов. Если данных много - очень сложно понять что вообще происходит и когда закончится. В mailing list вообще советуют скопировать все с другого сервера ручками и запустить очистку лишнего, не полагаясь на streaming.
- во время добавления/удаления сервера или compaction все тормозит так, что запросы начинают отваливаться по таймауту. Приходится отлавливать и повторять, что не очень хорошо. Поиск по интервалу ключей отваливается с timeout очень часто.
- compaction во время выполнения может потребовать дополнительно 100% места, занимаемого column family. Способ борьбы - sharding column family на несколько кусков.
- способа сделать hot backup всей БД не нашел.
- в качестве внешнего API используется thrift, хотят заменить на Avro (и я их понимаю).
- on-disk формат обещает скоро измениться, индексов по другим полям пока сделать нельзя.
- базовая функциональность работает нормально
- возможности организации данных в кластер существенно хуже чем в Cassandra, поддерживается только master/master и master/slave репликация.
- для доступа к внешним данным используется REST, есть несколько Java-оберток, но, например, сделать bulk insert/update позволяет только 1 библиотека из 4.
Как мне кажется, из всех NoSQL СУБД самой перспективной является... Lucene :-)
В самом деле:
- есть возможность хранения довольно сложных документов, с переменным числом полей
- для каждого поля можно хранить только данные, можно только индекс, можно то и другое вместе, можно анализировать данные поля для полнотекстового поиска
- та же самая append-only модель обновления базы, что и в NoSQL СУБД и дикая скорость создания новых записей (особенно если их предварительно индексировать в памяти, а потом мержить с индексом на диске).
- поддержка не только текстовых, но и числовых полей с возможностью поиска по диапазону значений
- кеширование на уровне lucene (через механизм фильтров)
- вполне полноценный язык запросов, транзакции
- накладные расходы минимальные: при хранении индексированного ключа + 5 кб неиндексированных данных накладные расходы меньше 1%
- полный контроль над тем, когда сбросить индекс на диск, когда провести оптимизацию (и проводить ли вообще).
Что же все в этих NoSQL нашли ?