[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MongoDB
paul85
Привет, форумчане!

Вот под руку, в качестве дальнейшего саморазвития, попалась MongoDB. Чего-то я не понял фишки этой NOSQL СуБД. Вроде бы как с помощью нее неплохо создавать распределенное хранилище. И что в ней хорошо реализованы механизмы, то что в реляционных называется репликацией.

Еще говорили что в Mongo хорошо хранить деревья...

Но как оказалось ничего хорошего в этом нет. И работает она дольше реляционных на выборку. Единственное, что там есть, так это урезанный JS (?) интерпретатор, или вроде того... Там можно в качестве запросов писАть небольшие сценарии и экономить время на IO.

Возникает вполне логичный вопрос: а что такое MongoDB в "бытовой" ситуации, когда не требуется разворачивать гига-нагруженный проект? Просто ее хвалят люди, кто не умеет проектировать реляционные БД? И те кто не знает SQL?

Вообщем непонятно... Кто тему просек - прошу разъяснить на пальцах, что же такого прикольного?

Или вот тот же Redis, со схемой хранения ключ-значение. Ну а чем MySQL тот же не подходит? Объявляешь первое поле INT, второе TEXT... И погнали!
Игорь_Vasinsky
ну, скажу кратко - используется как локальное хранилище
на примере моей работы - содержит справочники - к которым ожидается наиболее частое обращение - как я понял - чтобы снизить нагрузку на основной сервер БД

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
vagrand
Основная прелесть MongoDb в том, что одна сущность может содержать разный набор полей, по которым можно организовать индексированный поиск. Я в одном своем проекте использую ее для хранения динамических атрибутов товаров.

Что же касается Redis то это система кэширования и сравнивать ее с MySQL как минимум некорректно. Запись и чтение в Redis происходит намного быстрее чем в mysql

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
inpost
vagrand
А если таблицы хранить в кэше, ты уверен, что Redis всё равно будет впереди при условии, что соединения открыты и туда и туда?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
vital
Цитата (inpost @ 7.02.2015 - 03:36)
vagrand
А если таблицы хранить в кэше, ты уверен, что Redis всё равно будет впереди при условии, что соединения открыты и туда и туда?

Так-то редис и есть система для кеширования. Только с key-value наваротами.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
vagrand
inpost
Я не делал никаких сравнительных тестов, все сделано уже до меня. Думаю что, если бы Redis был медленнее mysql-я то им бы просто никто не пользовался.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Santehnick
Redis данные хранит в оперативной памяти, поэтому работает быстрее чем чтение с диска, да и в целом потребляет меньше ресурсов системы, чем mysql. Выгружают горячие данные из основной субд в redis и раздают уже оттуда. Помоему вконтакте так работает, выгружают "горячие данные" в nosql хранилище и оттуда уже раздают клиентам. Поэтому если вконтакт падает, ему требуется несколько часов на разогрев кеша.

Представь сколько раз в секунду запрашивают профиль Павла Дурова и если каждый раз для сборки страницы ходить в mysql, то сайт не выдержит боевой нагрузки, поэтому разумнее такие горячие данные выгружать в кеш.
paul85
Цитата (vagrand @ 6.02.2015 - 23:58)
одна сущность может содержать разный набор полей, по которым можно организовать индексированный поиск.

Один документ, ну да. А что мешает реализовать тоже самое на реляционных СуБД в 3 таблицы? Одна товар, другая набор характеристик, а третья - линковочная между ними. Через 2 джойна выходим на товар по характеристике. И всё.

А есть именно задача, которую реализовать на реляционных большая проблема?

Меня MongoDB смущает отсутствием отношений (джойнов проще говоря). Всё это нужно реализовывать через дополнительные запросы в цикле. У меня к этому очень двоякое отношение. С одной стороны, можно особо не проектировать БД. С другой стороны, экономия времени на реализацию отношений происходит засчет отсутствия IO операций с вызывающим скриптом. А так это как были запросы в цикле, так и остались. То есть не гут, насколько я понимаю.

Опять же, говорю про обычные проекты, где СуБД - это один сервер.

Про Redis понял, спасибо за разъяснения. =)
Invis1ble
Цитата
Меня MongoDB смущает отсутствием отношений (джойнов проще говоря). Всё это нужно реализовывать через дополнительные запросы в цикле.

Если тебе понадобились джоины, то ты выбрал не тот тип хранилища.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

vagrand
paul85
Цитата
А что мешает реализовать тоже самое на реляционных СуБД в 3 таблицы?

Да в общем то наверно ничего и не мешает. Я так сказать проиллюстрировал на примере в чем особенность MongoDb. Касательно ее производительности спорить не буду, поскольку просто не знаю. Я ее изучал чисто для галочки в резюме.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
paul85
Цитата (Invis1ble @ 8.02.2015 - 10:27)
Если тебе понадобились джоины, то ты выбрал не тот тип хранилища.

Invis1ble, ну а как? В базе данных по-любому ведь будет несколько таблиц (коллекций). Например коллекция пользователей и коллекция еще чего-нибудь, скажем выполненных заданий этими пользователями. Таблицы надо каким-то образом связывать. Ну в реляционных понятно, один ко многим да и всё. А тут как? Невозможно ведь всё упихать в одну таблицу (коллекцию)...

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

Вернее даже не так: что такое MongoDB для небольших проектов? Есть люди, которые перешли на нее и бравируют. Но непонятно чем. Вот у меня такое ощущение, что такие индивиды просто-напросто не владеют языком SQL и не умеют делать сложные запросы с джойнами. Тогда понятно: в MongoDB всё делается на JS подобном языке через запросы в цикле - даже школьник поймет логику.

Есть мнение, почему ощущается некий тренд вокруг Mongo? Может быть я чего-то не понимаю и не вижу очевидного?

Цитата (vagrand @ 8.02.2015 - 12:58)
Я так сказать проиллюстрировал на примере в чем особенность MongoDb.

vagrand, ну в чем особенность я более или менее понимаю. А вот где эту особенность заюзать чего-то неочень... =(

Или эти инструменты, равно как и Redis, - уже имеют полный смысл на высоконагруженных проектах и только на них?
vagrand
paul85
Цитата
Или эти инструменты, равно как и Redis, - уже имеют полный смысл на высоконагруженных проектах и только на них?


А если у тебя не высоконагруженный проект, то зачем тебе вообще NoSQL?

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Invis1ble
Цитата
ну а как? В базе данных по-любому ведь будет несколько таблиц (коллекций). Например коллекция пользователей и коллекция еще чего-нибудь, скажем выполненных заданий этими пользователями. Таблицы надо каким-то образом связывать. Ну в реляционных понятно, один ко многим да и всё. А тут как? Невозможно ведь всё упихать в одну таблицу (коллекцию)...

ну как... полная противоположность нормализации

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

sergeiss
Цитата (vagrand @ 8.02.2015 - 22:21)
А если у тебя не высоконагруженный проект, то зачем тебе вообще NoSQL?

Насколько я понимаю, преимущество NoSQL не в скорости как таковой, а в удобстве работы с данными. Когда нет абсолютно жесткой структуры данных, например. И не только это.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.