Где почитать про проектирование баз данных(nosql) с практическими примерами?
==============================================================================

 Здравствуйте, ребята. Я преимущественно разрабатываю приложения, используя нереляционные базы данных, хотя иногда и приходится касаться и реляционных. Хотелось бы найти такой ресурс, где кратко и понятно разобраны принципы архитектурного проектирования приложений, используя nosql-базы. К примеру, было бы очень удобно посмотреть на разбор того, как наиболее правильно хранить пользовательские данные, комментарии, лайки, медиа-данные. Вспомните любую социальную сеть, где над каждым постом есть куча комментариев, лайков, репостов - хотелось бы увидеть реализации или хотя бы наглядную теорио о том, как это(и другие подобные случаи) реализовать правильно. Спасибо! 

> используя nosql-базы

  

Шаг 1. Убрать из лексикона термин "NoSQL". Хотя бы временно.  

> как наиболее правильно хранить пользовательские данные, комментарии, лайки, медиа-данные.

  

Шаг 2. Выписать или запомнить три важнейших свойства любой СУБД:  
* модель данных: что является элементом данных, что является коллекцией элементов, чего в СУБД должно быть постоянное количество, есть ли схема и в каком виде, как обеспечиваются связи между элементами данных на уровне модели;  

Пример: MongoDB, элемент данных - документ, описывается как JSON-документ с некоторыми специфичными для Монги расширениями. Коллекция элементов - коллекция документов. Количество коллекций более-менее постоянное, количество документов растёт.
* ограничения и гарантии физической реализации модели данных - какие операции какую сложность имеют, какую цену (в плане пространства на устройстве хранения и процессорного времени) имеет каждая используемая структура данных или алгоритм; какие параметры как будут расти во время эксплуатации БД.  

Пример: графовые БД, имеющие "настоящий" графовый движок, т.е. такой, который хранит физические ссылки из одной вершины на другую, гарантируют константное время выборки связанных вершин. В связи с этим их выгодно использовать для сильносвязанных нечасто изменяющихся данных (графы друзей в социалочках и т.п.)
* инструментарий логического и физического уровня: по сути это предыдущие пункты более подробно - какие структуры данных доступны, в частности какие есть индексы, какие способы выборки/фильтрации/сортировки присутствуют; для чего гарантируется транзакционность (особо важный вопрос); где находится база в [CAP диаграмме](http://blog.nahurst.com/visual-guide-to-nosql-systems); какие есть средства логического уровня, например представления (view);

> Вспомните любую социальную сеть, где над каждым постом есть куча комментариев, лайков, репостов

  

Шаг 3. Научиться ставить задачу с точки зрения обрабатываемых данных:  
* какие данные будут иметь постоянный объем или расти медленно, а какие - быстро и постоянно;
* какие будут запросы к данным, что будет выбираться как есть, а что нужно будет дополнительно агрегировать;
* какие запросы будут плановые, а какие придётся выполнять внепланово;
* какой нужен уровень доступности, какова ценность хранящихся данных и цена простоя.

  

Шаг 4. Ознакамливаться с СУБД здесь: [nosql-database.org](http://nosql-database.org/) и выбирать нужную с учётом:  
* вашей задачи;
* порога вхождения;
* наличия доступных специалистов.

 

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