Pull to refresh

Битва key-value хранилищ

Reading time2 min
Views54K

Какие key-value хранилища вы используете в бою?


Позаимствовал список с сайта db-engines.com (кстати, очень любопытный сайт, рекомендую), включил все базы с ненулевой «популярностью» оттуда. Не отмечайте базы которые просто пробовали/интересно, а только те, что крутятся и приносят деньги вашей компании прямо сейчас.

Обратите внимание: MongoDB это НЕ key-value хранилище, однако за нее можно проголосовать, см. пункт «Хранилище документов в качестве key-value».

Пишите, если забыл какую-то популярную базу (т. е. забыли авторы сайта db-engines.com), добавлю в опрос.

Какие свойства key-value хранилища вам важны?


Разношерстная куча требований. Просьба вдумчиво пройтись по ним. Обратите внимание, что многие свойства противоречат друг другу, потому что половина направлена на функциональность, а другая — на производительность, которые в целом противоречат друг другу. Некоторые свойства возможны только при наличии других свойств или комбинаций, некоторые являются усиленными/ослабленными версиями друг друга, и т. д.

Пункты 2-6 описывают какие-то разумные свойства транзакций (кстати, вам могут быть вообще не нужны транзакции: (напр. простые get и put по ключу — это еще не транзакции), тогда не отмечайте ни один из этих пунктов), пункты 7-9 — уровень согласованности свойств, указанных выше.

«Нативный клиент для Java/С/С++/С#» — значит клиент для этих языков не просто формирует запрос на языке, на котором написана база, и идет в какой-нибудь IPC/JNI, а прямо работает с базой. По сути, это означает, что база написана (в том числе) на этом языке. Благодаря наличию таких штук, как Protocol Buffers, Thrift и подробных, база, вообще говоря, может быть написана на нескольких языках.

Я 100% забыл какие-то важные свойства, пишите в личку, добавлю в опрос.
Only registered users can participate in poll. Log in, please.
Какие key-value хранилища вы используете в бою?
1.48% Aerospike20
0.3% ArangoDB4
4.58% Berkeley DB62
0.74% Coherence10
1.26% DynamoDB17
2.07% Ehcache28
0.07% FoundationDB1
0.3% GridGain4
0.3% GT.M4
0.07% Hamsterdb1
1.33% Hazelcast18
0% Hibari0
0% HyperDex0
0.3% Infinispan4
0.52% Kyoto Cabinet7
3.1% LevelDB42
0.52% MapDB7
37.74% Memcached511
0.22% NCache3
0.59% Oracle NoSQL8
0.15% Project Voldemort2
53.99% Redis731
3.25% Riak44
0.52% RocksDB7
0% Scalaris0
0.3% SimpleDB4
0% Sqrrl0
0% STSdb0
1.77% Tarantool24
0.81% Tokyo Cabinet11
0.3% Tokyo Tyrant4
0% WebSphere eXtreme Scale0
0.07% XAP1
0.07% ZODB1
1.62% Другое key-value хранилище (укажу в комментариях)22
20.61% Реляционная БД в качестве key-value хранилища (Oracle, MySQL, PostgreSQL, ...)279
20.97% Хранилище документов в качестве key-value (MongoDB, CouchDB, Couchbase, ...)284
4.51% БД другого типа в качестве key-value хранилища (напр. графовая: Neo4j, wide column хранилище: Cassandra, HBase, ...)61
6.13% Самописное key-value хранилище83
8.2% Не использую key-value хранилище111
0.44% LMDB6
0.07% LedisDB1
0.15% GoLevelDB2
0.3% BoltDB4
1354 users voted. 1101 users abstained.
Only registered users can participate in poll. Log in, please.
Какие свойства key-value хранилища вам важны?
62.37% Масштабируемость (хочу хранить больше / выдерживать большую нагрузку добавлением серверов)358
34.84% Атомарность транзакций по одному ключу (либо записать вcе изменения значения, либо ничего)200
17.6% Изолированность транзакций по одному ключу (несколько одновременных транзакций по одному ключу запрещены)101
33.28% Надежность (durability) транзакций (после окончания транзакции я точно не потеряю данные)191
12.2% Атомарность транзакций по нескольким ключам70
6.97% Изолированность транзакций по нескольким ключам (несколько одновременных транзакций, пересекающиеся по ключам, запрещены)40
6.62% Транзакции в пределах сервера (на ДЦ/всю базу изменения распространятся со временем)38
5.23% Транзакции в пределах ДЦ (на всю базу изменения распространятся со временем)30
9.41% Транзакции на всю базу54
44.43% Отказоустойчивость (сгорел сервер — продолжаем работу)255
20.21% Крутая отказоустойчивость (отключился ДЦ — продолжаем работу)116
20.21% Репликация изменений между серверами (свойство чуть слабее, чем масштабируемость)116
14.11% Упорядоченность по ключам (возможность итерироваться по ключам в отсортированном порядке, найти ближайший больший/меньший, чем данный, ключ, и т. д.)81
20.21% Гарантии максимального времени ответа (response latency)116
18.47% Подписка на события по ключу106
15.85% Логгирование (какое-нибудь, как минимум хочу иметь возможность видеть, что происходит с базой, для дебага)91
5.92% Логгирование изменений с возможностью воспроизведения34
16.38% Асинхронное API (получил future по ключу)94
40.07% Хранение данных в памяти (ходить за каждым ключом на диск — слишком медленно)230
23.87% Хранение на диске (напр. для надежности, если БД не распределенная)137
10.45% Поддержка Windows (хочу гонять базу на своей девелоперской Винде / у меня Windows сервера)60
6.1% Поддержка MacOS (хочу гонять базу на своем девелоперском Маке)35
5.92% Удаленные запросы (RPC, тонкие клиенты)34
9.23% Нативный клиент для Java53
11.32% Нативный клиент для С/С++65
9.58% Нативный клиент для С#55
11.5% Веб-интерфейс (слать CRUD запросы по HTTP)66
16.2% Веб-морда для мониторинга базы93
8.36% Бекап в реляционную БД48
28.4% Какой-нибудь бекап163
10.63% Не нужны никакие свойства, как и key-value хранилища в принципе61
574 users voted. 1154 users abstained.
Tags:
Hubs:
Total votes 62: ↑46 and ↓16+30
Comments57

Articles