Какая база данных NoSQL для чрезвычайно больших объемов данных - PullRequest
4 голосов
/ 30 мая 2011

Я смотрю на NoSQL для очень больших объемов данных. В настоящее время мы храним кэшированные версии текста веб-страницы в MySQL, но создается впечатление, что база данных очень быстро разрастется.

Мои требования:

  • Долговечность, не должно терять данные при сбросах / записи
  • Очень быстрое чтение, достаточно быстрая запись
  • Полностью согласованная репликация
  • Предпочтительно, в память плюс возможная запись на диск

Я сейчас смотрю: MongoDB, Redis, Raik и Cassandra.

Что лучше всего соответствует моим требованиям?

Ответы [ 5 ]

4 голосов
/ 04 июля 2011

У меня есть опыт работы с Redis и MongoDB, но я бы не рекомендовал ни один для вашего случая использования. Redis великолепен во всех отношениях, но поскольку он предназначен только для оперативной памяти и не имеет функций кластеризации (пока они находятся в разработке), он не очень хорошо масштабируется. MongoDB Я бы никогда больше не использовал для чего-либо, кроме небольшого набора реплик.

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

Раздевание в 1.8.0 через 1.8.1 было катастрофой. Были полные баги, которые никогда не должны были превращаться в стабильный релиз. Конфигурация не была сброшена должным образом, и было очень легко привести вашу базу данных в плохое состояние, чтобы куски никогда не перемещались из основного сегмента. 1.8.2 решает большинство из них и кажется более стабильным, но я не доверяю реализации шардинга. Добавьте к этому, что шардинг труден, даже когда все работает, не всегда легко выбрать естественный ключ шарда, и если ты не шардишь, это вызовет у тебя много горя.

С MongoDB действительно легко работать, а набор функций действительно хорош. Документация, драйверы и сообщество - все отлично. MongoDB работает как замена для MySQL, но не используйте его для всего, что нужно масштабировать.

В настоящее время мы смотрим на переезд на Кассандру. Я нахожу динамо-модель (например, отсутствие мастер-узлов; нигде не пишите и не читайте; просто добавляйте узлы для роста кластера), и эти функции более или менее подходят нам. Модель данных менее похожа на схему, как MongoDB, хотя и немного более ограничена (в основном вы можете выбирать между одним или двумя уровнями хэшей). Я уверен, что сообщество хорошо, когда вы в него вступаете, но мне пока трудно найти хорошую информацию о том, как решать общие проблемы, а документации не хватает. Большая часть информации, которую вы находите в блогах, - это год, и с тех пор произошло много событий (0,7 и 0,8 кажутся действительно значимыми обновлениями, но большинство из них - около 0,6). Драйверы также не очень зрелые или хорошо документированные, из того, что я видел до сих пор, и все, кажется, спорят о том, следует ли использовать Thrift, Avro или CQL (и этот показатель изменился с 0,6 до 0,7 до 0,8) ,

Riak интересен по тем же причинам, что и Cassandra, но для нас недостаточно простого хранилища ключей-значений, нам нужно иметь возможность обновляться без предварительного чтения. С Riak это невозможно, так как значения - это просто капли. Похоже, это не будет проблемой для вас.

HBase - другой претендент. Кажется, что настраивать и запускать из-за большого количества разных частей, ZooKeeper, HDFS и т. Д. Это сложно важно для тебя. Это кажется проверенным и правдивым, но, как и в MongoDB, вам нужно остерегаться проблем с шардингом, вы должны немного подумать о своих ключах, иначе у вас возникнут проблемы.

Существует также CouchDB, Project Voldemort и множество других возможных вариантов. Я думаю, что если вы серьезно относитесь к "чрезвычайно большим объемам данных", то это между Cassandra, Riak и HBase. Ударьте Риака, если чистого хранилища ключ-значение недостаточно. В зависимости от того, что вы подразумеваете под «полностью согласованной репликацией», Cassandra и Riak выходят, поскольку существует возможность (не обязательно большого и настраиваемого) чтения устаревшего значения.

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

4 голосов
/ 30 мая 2011

Храните кэшированные версии в MemCache вместо MySQL. Это устранит большинство писем. Запись в MySQL плохая, потому что она убивает кеш запросов. Когда вы кэшируете страницы в MemCache, у вас будет гораздо меньше записей в базу данных, и вы будете испытывать меньшее давление чтения. Вы можете кэшировать результаты сложных запросов или кэшировать целые страницы, как вам нравится.

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

0 голосов
/ 31 мая 2011

RavenDB может хранить до 16 ТБ данных на узел, и вы можете иметь несколько узлов на машину, выступая в качестве одной базы данных, используя встроенную поддержку шардинга.Это очень много.

Надежность, быстрота, репликация - все это есть, и работа в памяти также поддерживается (но не рекомендуется, если вы хотите масштабировать до 16 ТБ на узел).

0 голосов
/ 30 мая 2011

Для данных с очень большими объемами ясно, что Cassandra и hadoop / hbase намного превосходят все остальные в этой задаче. Кассандра зарекомендовала себя на больших кластерах, таких как 400 узлов. rdms dbs не может легко масштабироваться, также у Монго есть некоторые проблемы, когда количество узлов начинает увеличиваться http://www.nosqlbenchmarking.com/2011/05/paper-on-elasticity-and-scalability-for-acm-socc-2011/

Сердар

0 голосов
/ 30 мая 2011
...