7

Вопрос по MongoDB

Товарищи, подскажите, научите, плиз.

Я  прочитал информацию по MongoDB, даже учебник нашёл  и буду там черпать инфу, но у меня, скорее, идеологический вопрос!

Вот как правильно организовывать и хранить в ней данные, именно идейно правильно. Я видел рассуждения на СтекОверФлоу, но вот пока не складывается и реляционная модель плотно сидит в голове. Можно ли на каком-то примере связанных таблих и о том, как это хранить в Монге?

Лига программистов

2.3K постов12K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

Допустим у нас есть какой-нибудь продукт и связанная с ним картинка

Связь будет просто по айдишникам.

product:

{

_id : ObjectId('1'),

name : "randomproduct",

resources: [

ObjectId(2),ObjectId(3)

]

}


resource:

{

_id:ObjectId('2"),

name:"url1"

},

{

_id:ObjectId(3),

name:"url2"

}

раскрыть ветку (10)
0
Автор поста оценил этот комментарий

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

раскрыть ветку (9)
0
Автор поста оценил этот комментарий

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


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


Еще есть подход для скорости работы (потому что составные индексы на массивы монги не всегда хорошая штука) это заводить реляционную базу с индексами. То есть данные по продукту а ля какого цвета и какая стоимость хранишь в монге. а вот поисковые данные а ля партномер, скуй или категория хранишь в sql с привязкой к монговым айдишникам. но это потребует какой-то транзакционности.


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

раскрыть ветку (8)
0
Автор поста оценил этот комментарий

Блин... ну вот а полноценный пример, например, БД для Пикабу, вот оно как бы выглядело?

раскрыть ветку (7)
2
Автор поста оценил этот комментарий

если что на Пикабу много разных баз используется, и Cassandra, Redis, Aerospike, ElasticSearch, Sphinx и прочие. Оcновная rdbms конечно же MySQL. Но связей между таблицами нет

раскрыть ветку (5)
0
Автор поста оценил этот комментарий
А почему много, разные типы данных в разных бд? А связь между базами есть или это не обязательно?
раскрыть ветку (4)
3
Автор поста оценил этот комментарий

каждая БД в нашем стеке выполняет свою роль. Большая часть данных дублируется, т.е. данные пользователя могут быть размазаны на 3-4 БД. Например, Aerospike - это rvdb с хранением на дисках, т.е. мы в нем храним то, что в памяти дорого хранить. REdis - kvdb  для хранения в памяти, т.е. временные данные только. ElasticSearch - поиски и некоторые сложные выборки по датам. Sphinx - только для выпадающих список тегов, удобен тем, что мы индекс целиком можем пересоздавать раз в N минут. И так далее.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий
А как называются сейчас люди, которые этим занимаются? Это разработчики или какой подвид dba?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

у нас это разработчики делают совместно с devops командой, так таковых dba у нас нет, увы

1
Автор поста оценил этот комментарий

Разное назначение бд как минимум. Что-то реляционное, что-то полнотекстовый движок, что-то кэш.

0
Автор поста оценил этот комментарий

если совсем в наивном варианте:

post:

{ _id, text, author }

comments :

{_id, text, author,

post: ObjectId(),

parent_comment: ObjectId()}


Полноценный вариант надо сидеть и проектировать довольно долго =)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества