Это действительно зависит от ваших наборов данных. Правило номер один для разработки NoSQL - сначала определить сценарии запросов. Как только вы по-настоящему поймете, как вы хотите запрашивать данные, вы можете посмотреть на различные решения NoSQL. Единицей распределения по умолчанию является ключ. Поэтому вы должны помнить, что вы должны иметь возможность эффективно разделять ваши данные между вашими узловыми машинами, в противном случае вы получите горизонтально масштабируемую систему со всей работой, выполняемой на одном узле (хотя и лучшие запросы в зависимости от случая).
Вам также необходимо вспомнить теорему CAP: большинство баз данных NoSQL в конечном итоге становятся согласованными (CP или AP), тогда как традиционными реляционными СУБД являются CA. Это повлияет на то, как вы обрабатываете данные и создаете определенные вещи, например, генерация ключей может оказаться хитрой.
Также помните, что в некоторых системах, таких как HBase, нет концепции индексирования. Все ваши индексы должны быть построены с помощью логики вашего приложения, и любые обновления и удаления должны будут управляться как таковые. С Mongo вы можете создавать индексы на полях и запрашивать их относительно быстро, также есть возможность интегрировать Solr с Mongo. Вам не нужно просто выполнять запрос по идентификатору в Mongo, как в HBase, который является семейством столбцов (то есть базой данных в стиле Google BigTable), где у вас по существу есть вложенные пары ключ-значение.
Итак, еще раз речь идет о ваших данных, о том, что вы хотите сохранить, как вы планируете их хранить и, что наиболее важно, как вы хотите получить к ним доступ. Проект Lily выглядит очень многообещающе. В работе, с которой я работаю, мы берем большое количество данных из Интернета и храним их, анализируем, анализируем, анализируем, анализируем, транслируем, обновляем и т. Д. И т. Д. Мы не просто используем одну систему, но много которые лучше всего подходят для работы под рукой. Для этого процесса мы используем разные системы на разных этапах, поскольку он дает нам быстрый доступ туда, где он нам нужен, предоставляет возможность потоковой передачи и анализа данных в режиме реального времени и, что важно, отслеживает все по ходу работы (как потеря данных в продуктовой среде). система это большое дело). Я использую Hadoop, HBase, Hive, MongoDB, Solr, MySQL и даже старые добрые текстовые файлы. Помните, что производить систему с использованием этих технологий немного сложнее, чем устанавливать MySQL на сервер, некоторые выпуски не так стабильны, и вам действительно нужно сначала провести тестирование. В конце концов, это действительно зависит от уровня сопротивления бизнеса и критического характера вашей системы.
Еще один путь, который до сих пор никто не упоминал, - это NewSQL, то есть горизонтально масштабируемые СУБД ... Есть несколько таких, как кластер MySQL (я думаю) и VoltDB, которые могут подойти вам.
Опять же, речь идет о понимании ваших данных и схем доступа, системы NoSQL также не являются нереляционными, то есть не являются реляционными и лучше подходят для нереляционных наборов данных. Если ваши данные по своей природе являются реляционными, и вам нужны некоторые функции SQL-запросов, которые действительно должны выполнять такие вещи, как декартовы продукты (также называемые объединениями), тогда вам лучше придерживаться Oracle и тратить некоторое время на индексацию, сегментирование и настройку производительности.
Мой совет - поэкспериментировать с несколькими разными системами. Однако для вашего случая использования я думаю, что база данных семейства столбцов может быть лучшим решением, я думаю, что есть несколько мест, где реализованы аналогичные решения для очень похожих проблем (я думаю, что NYTimes использует HBase для отслеживания кликов на странице пользователя). Еще один замечательный пример - Facebook, и они используют HBase для этого. Здесь есть действительно хорошая статья, которая может помочь вам в дальнейшем и более подробно объяснить некоторые моменты выше. http://highscalability.com/blog/2011/3/22/facebooks-new-realtime-analytics-system-hbase-to-process-20.html
Конечным моментом будет то, что системы NoSQL не являются всем и заканчивают все. Помещение ваших данных в базу данных NoSQL не означает, что они будут работать лучше, чем MySQL, Oracle или даже текстовые файлы ... Например, см. Этот пост в блоге: http://mysqldba.blogspot.com/2010/03/cassandra-is-my-nosql-solution-but.html
Я бы посмотрел;
MongoDB - документ - CP
CouchDB - документ - AP
Redis - значение ключа в памяти (не семейство столбцов) - CP
Cassandra - семейство столбцов - доступно и допустимо для разделов (AP)
HBase - семейство столбцов - согласовано и разделеноТолерантный (CP)
Hadoop / Hive - Также обратите внимание на потоковую передачу Hadoop ...
Hypertable - Другая база данных CF CP.
VoltDB - действительно красивый продукт, база данных отношений, которая распространяется и может работать для вашего случая (это может быть проще).Похоже, что они также предоставляют корпоративную поддержку, которая может больше подходить для продуктивной среды (т. Е. Дать бизнес-пользователям чувство безопасности).
Любой способ, который мой 2c.Игра с системами - действительно единственный способ узнать, что действительно работает для вашего случая.