Выбор базы данных NoSQL

Мне нужна база данных NoSQL, которая будет работать в Windows Azure и хорошо работает для следующих параметров. На данный момент наиболее многообещающими вариантами являются Azure Table Storage, HBase и Cassandra.

  • 1 миллиард организаций
  • до 100 чтений в секунду, хотя кеширование в большинстве случаев делает его намного меньше
  • около 10-50 операций записи в секунду

Сильная согласованность была бы плюсом, поэтому, возможно, в этом отношении HBase будет лучше, чем Cassandra.

Запросы часто будут выполняться во вторичной базе данных в памяти с различными индексами в дополнение к ElasticSearch или Windows Azure Search для полнотекстового поиска и, возможно, с некоторой фильтрацией.

Хранилище таблиц Azure выглядит неплохо, но, насколько я могу судить, большая разница между хранилищем таблиц Azure и HBase заключается в том, что HBase поддерживает обновление и чтение значений для одного свойства, а не для всей сущности сразу. Я предполагаю, что у HBase должны быть некоторые недостатки, но я не уверен, какими они будут в этом случае.

Я также думаю, что crate.io может показаться интересным, но мне интересно, могут ли возникнуть непредвиденные проблемы.

У кого-нибудь есть другие идеи о преимуществах и недостатках различных баз данных в этом случае, и если какие-либо из них действительно не подходят по какой-либо причине?


person Postman Bob    schedule 22.01.2015    source источник
comment
Вы рассматривали MySQL?   -  person Nicola Ferraro    schedule 23.01.2015
comment
Привет, crate dev, так что я явно предвзято, но я думаю, что crate прекрасно справится с вашим вариантом использования. Хотя я не уверен, каковы ваши требования к последовательности. Но вы можете прочитать crate.io/docs/en/latest/storage_consistency.html И судите сами.   -  person mfussenegger    schedule 23.01.2015
comment
Думаю, что хоть часть данных буду хранить в SQL. Ящик выглядит интересно, я еще разберусь с ним. Кажется, что на данный момент он может быть слишком незрелым, и не так много людей используют его, но я думаю, возможно, попробовать его для некоторых менее важных данных.   -  person Postman Bob    schedule 24.01.2015
comment
На недавнем Crate SnowSprint было проделано много работы с Windows и Azure. Сообщите мне, если вам нужна дополнительная информация.   -  person Spanky    schedule 21.02.2015


Ответы (1)


В настоящее время я работаю с Кассандрой, и я могу помочь с несколькими плюсами и минусами.

Требования

Cassandra легко справится с этими тремя требованиями. Он был разработан для быстрого чтения и записи. Фактически, Cassandra отлично справляется с записью, в основном потому, что вы можете писать, не выполняя чтения.

Кроме того, Cassandra хранит некоторые данные в памяти, так что вы даже можете избежать вторичной базы данных.

Последовательность

В Cassandra вы выбираете согласованность в каждом запросе, который вы делаете, поэтому вы можете иметь согласованные данные, если хотите. Обычно вы используете:

  • ОДИН - только один узел должен получить или принять изменение. Это означает быстрое чтение / запись, но низкую согласованность (у вас может быть другая машина, доставляющая старую информацию, в то время как согласованность не была достигнута).

  • КВОРУМ - 51% ваших узлов должны получить или принять изменение. Это означает, что чтение и запись не будут такими быстрыми, но вы получите ПОЛНУЮ согласованность, ЕСЛИ вы используете ее в ОБЕИХ операциях чтения и записи. Это потому, что если более половины ваших узлов имеют ваши данные после того, как вы вставили / обновили / удалили, то при чтении с более чем половины ваших узлов по крайней мере один узел будет иметь самую последнюю информацию, которая будет той, которая будет доставлена. .

Оба эти варианта рекомендуются, поскольку они позволяют избежать единой точки отказа. Если бы все машины должны были принять, если бы один узел не работал или был занят, вы не смогли бы запросить.

Плюсы

Cassandra - это решение для повышения производительности, линейной масштабируемости и предотвращения единичных точек отказа (вы можете отключить машины, другие возьмут на себя работу). И большую часть своей работы по управлению он выполняет автоматически. Вам не нужно управлять распределением данных, репликацией и т. Д.

Минусы

Минусы Cassandra заключаются в моделировании и запросах.

С помощью реляционной базы данных вы моделируете сущности и отношения между ними. Обычно вас не волнует, какие запросы будут сделаны, и вы работаете над их нормализацией.

У Кассандры другая стратегия. Вы моделируете таблицы для обслуживания запросов. И это происходит потому, что вы не можете присоединиться и не можете фильтровать данные как хотите (только по их первичному ключу). Итак, если у вас есть база данных для компании с продуктовыми магазинами, и вы хотите сделать запрос, который возвращает все продукты определенного магазина (например, Нью-Йорк), и другой запрос, чтобы вернуть все продукты определенного отдела (например. : Computers), у вас будет две таблицы ProductsByStore и ProductsByDepartment с одинаковыми данными, но по-разному организованы для обслуживания запроса.

Материализованные представления могут помочь в этом, избегая необходимости изменять в нескольких таблицах, но они должны показать, как все работает по-другому с Cassandra.

Денормализация также распространена в Cassandra по той же причине: производительность.

person Edu    schedule 19.09.2017