powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / денормализация mysql OLTP на базе MongoDB
15 сообщений из 15, страница 1 из 1
денормализация mysql OLTP на базе MongoDB
    #38741613
alexanoid1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть MySQL OLTP система со множеством отношений между таблицами. Например есть таблица products и вокруг нее десятки связанных таблиц.. различные типы, описания, скриншоты и так далее. Отношения между ними как 1 к 1 так и 1 ко многим, много ко многоим. Для отображения на клиенте каталога продукции необходимо делать запросы к mysql используя сложные joins что очень негативно сказывается на производительности.

Возникла идея денормализировать сущность product. Тоетсь при наступлении любого из CRUD событий с продуктом, мы будем формировать сообщение об этом в gearman queue а на другой стороне gearman worker будет создавать полное денормализированное представление продукта со всеми зависимостями и формировать документ на базе JSON и сохранять его в колекции products MongoDB.

С этим все более менее понятно, но вопрос возникает по след поводу - у продукта могут быть комментарии от пользователя. У каждого продукта их может быть разное число. Когда мы отображаем каталог продуктов возле каждого продукта хотелось бы показывать это число комментариев. Понятно что на лету просчитывать count для каждой записи в реляционной структуре это не самый лучший вариант. Здесь тоже напрашивается решение с отложенной обработкой через gearman queue который или будет заново пересчитывать через count общее число коментов для продукта и писать в mongodb либо делать +1 на числе из mongodb и обновлять там значение.

Вопрос - где лучше в Монго держать значение comments_number ? в той же коллекции products в отдельном филде или полностью в отдельной коллекции ?

Так же для каждого продукта в каталоге будет возможность сортировки по дате создания, числу закачек, имени. Для того что б сортировка происходила быстро нам необходимо будет все эти значения держать в отдельных филдах коллекции products ?

Посоветуйте плиз как лучше организовать данные в Монго для описанных мной сценариев. Спасибо !
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38741742
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexanoid1,

А зачем в этой схеме Монго? Кто мешает денормализованные данные хранить в том же MySQL?
В блобах в json. Вытащив наружу поля, по которым хотите сортировать или фильтровать?

Если у вас новые комментарии появляются не по 100 в секунду, то их можно и в реляционке оставить и даже просчитывать при чтении автоматически, способов куча )
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38741768
alexanoid1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто хочу сразу убежать от модели вертикального масштабирования на горизонтальное(именно для клиентских запросов которых могут быть сотни тысяч и миллионы). Плюс для денормализации NoSQL изначально и был изобретен и оформлен в отдельную концепцию которую обычно приходится изобретать самому на базе RDBMS. С ростом трафика к NoSQL будем просто подкидывать новые узлы и тем самым не думать о распределении нагрузки.

Вопрос только где держать поля которые намного чаще будут изменяться чем теже поля содержащие в себе документы продуктов.
Держать эти поля(comments_number, downloads_number) вместе с product в одной колекции products или разнести их по разным колекциям ?
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38742255
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexanoid1,

Я так понимаю, что монга будет использоваться фактически в качестве кеша, в который асинхронно будут перегонятся изменения из основной базы и основной профиль - "мало записи, много чтения".

Тогда да, коллекция "продукты", с индексами на поля, по которым сортировать и фильтровать надо. Кол-во комментом имеет смысл хранить там же, т.к. операций записи мало, а оверхед на лишние операции чтения может быть велик.

НО - я думаю, что ваши вопросы заданы в неправильном порядке. Важнее, тут, наверное, именно сортировка, поиск и пагинация, а извлечение продуктов вторично. Посмотрите на SOLR или Sphinx - он решит все ваши проблемы, параллельно добавив полнотекстовый поиск с автокомплитом, извлечение фасетов и многое другое.
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38742295
alexanoid1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
scf, спасибо за ответ.

Да, sphinx уже установлен в системе и рассматривается как система полноценного поиска. На счет фильтрации, сортировки, пейджинации удивлен что он(sphinx) может помочь, но это скорее от моего незнания возможностей этого продукта. Займусь его изучением.

Несколько смутило ваше замечание по поводу извлечение продуктов вторично
А если оно не вторично а так же важно как и критерии описанные выше то как здесь быть ? Решит ли sphinx и эту проблему ?
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38742344
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexanoid1,

со Sphinx плотно не работал, но в Solr есть и возможность вместе с индексом хранить дополнительные поля (в вашем случае - json с продуктом), и пагинация, и фильтры по полям, и, разумеется, сортировка.
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38742476
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfколлекция "продукты", с индексами на поля, по которым сортировать и фильтровать надо. Кол-во комментом имеет смысл хранить там же...+1
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38745141
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexanoid1просто хочу сразу убежать от модели вертикального масштабирования на горизонтальное(именно для клиентских запросов которых могут быть сотни тысяч и миллионы).

Ну, тот же MySQL в основном и используют в системах для горизонтального масштабированияю. Благо решений для этого куча.
А что, у вас планируется миллионы запросов в секунду? Или это про запросы в сутки - но тогда там и одного сервера хватит с избытком.

alexanoid1Плюс для денормализации NoSQL изначально и был изобретен и оформлен в отдельную концепцию которую обычно приходится изобретать самому на базе RDBMS.

Это, мягко говоря, не верное утверждение.

alexanoid1С ростом трафика к NoSQL будем просто подкидывать новые узлы и тем самым не думать о распределении нагрузки.

Я вот еще не видел реальных внедрений, где бы все так просто было.
Ну и обычно получается, что для того, что бы держать какие-нибудь очевидные миллионы запросов в сутки городят облако из 10 машин, хотя и одной хватило бы. Увы, в Монго приходится платить минимум утроением числа машин по сравнению с MySQL.

Но вообще если нужен кэш (а вам нужен именно кэш, как основное хранилище Mongo, мягко говоря, не слишком пригоден), то лучше брать Redis или memcached. Оно и проще и быстрее.
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38745339
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще не вижу причин не обходиться одним MySQL.

Все эти "непонятное число комментариев" в прилично нормализованной структуре быстро вытаскиваются. Количество комментариев можно увеличивать при записи комментария, ну, раз в месяц проверять целостность базы...

Все разговоры о негативном сказывании без цифр бессмысленны. Оно кем-либо замечается, это сказывание? Не думаю ведь.

А сколько товаров-то?
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38745342
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexanoid1Для отображения на клиенте каталога продукции необходимо делать запросы к mysql используя сложные joins что очень негативно сказывается на производительности.
Прямо так ко всем NN таблицам сразу? Для вывода каталога? Или все-таки карточки товара?
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #38747977
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поддерживаю тех, кто щитает, что прежде чем думать о построении звездолёта, обгоняю
щего аналогинчые системы гугла или амазона, нужно подумать - а будет ли такая нагрузка.

лично я не увидел причин для монго...

ну надо денормализованое хранить - чем мускл не подходит(или отдельная копия мускла на отдельном сервере раз переживаете за производительность).

монго хороша когда нет чёткой структуры... пока структура чёткая...я бы не парился...

ЗЫ
на конференциях бигдата, часто слышно - ноускл хорошо, вот для той задачи той конторы где родилась та или иная ноускл субд... а вот другим...

ЗЫЗЫ
мне советовали(ещо не пробовал) когда речь идёт о том что нам надо мускл и чучуть монго, посмотреть на постгри, где в новой версии есть возможность хранить json значения.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
денормализация mysql OLTP на базе MongoDB
    #39253774
как провести денормализацию такой структуры?
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #39255482
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с какой целью, студент?
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #39282370
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexanoid1,

как бы денормализация для решения проблем производительности join ов - это как бы позапрошлый век...

join - быстрая операция, её не нужно пытаться убирать, и современные тенденции решения проблем хранилищ - это, наоборот, супернормализация.
...
Рейтинг: 0 / 0
денормализация mysql OLTP на базе MongoDB
    #39282376
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfalexanoid1,

со Sphinx плотно не работал, но в Solr есть и возможность вместе с индексом хранить дополнительные поля (в вашем случае - json с продуктом), и пагинация, и фильтры по полям, и, разумеется, сортировка.


вот именно, нахрена ему тогда вообще моего?

внешний индекс на Solr или elastic search - и Всё....
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / денормализация mysql OLTP на базе MongoDB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]