|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
Решил в рамках изучения NoSQL сделать что-то полезное - "торрент-треккер" (ну формально не треккер а каталогизатор, аналог the pirate bay). Выбрал mongo потому что может полнотекстовый поиск (не нужен сфинкс, качество для поиска по наименованию раздачи вполне достаточно). Итого у меня 3 основных "сущности" - раздача (торрент) - полиморфная структура (набор полей зависит от категории аудио/видео итд) - пользователь - комментарий к раздаче Как известно проектирование NoSQL идет от необходимой функциональности, поэтому перечислю все функции: - отображение свежих раздач в разрезе/без разреза категорий - поиск по наименованию раздачи - отображение раздачи с комментариями к ней - поиск всех комментариев конкретного пользователя (для модерирования) - поиск всех торрентов конкретного пользователя (для модерирования) Предполагаю следующую схему хранения: Документ "раздача" содержит упорядоченный массив MongoID комментариев к раздаче Документ "комментарий к раздаче" содержит MongoID раздачи, пользователя, имя пользователя (денормализация) итого запрсы для модерирования (нечастые) будут выполняться "реляционным" образом основной же "запрос" на получение раздачи с комментариями будет "получить раздачу по id" + "получить список комментариев по списку id" Альтернативно обдумывал возможность внедрения массива комментариев внутрь раздачи, но не совсем понимаю как для модерации искать комменты конкретных пользователей... Есть какие-либо замечания/предложения. Хчется получить максимально эффективный/высокопроизводительный продукт (для минимизации расходов на хостинг) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 01:00 |
|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
dimzonРешил в рамках изучения NoSQL сделать что-то полезное - "торрент-треккер" (ну формально не треккер а каталогизатор, аналог the pirate bay). Выбрал mongo потому что может полнотекстовый поис кА чего не ElasticSearch? И NoSQL, и полнотекстовый поиск. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 10:25 |
|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
dimzonДокумент "раздача" содержит упорядоченный массив MongoID комментариев к раздачеЗачем? Где-то надо выводить количество комментариев? dimzonДокумент "комментарий к раздаче" содержит MongoID раздачи, пользователя, имя пользователя (денормализация)Нормальная форма относится к реляционной модели данных. В качетсве идентификатора не обязательно ObjectId использовать, можно и String, и GUID (с Int-ом маленькая проблема: в JavaScript его нет, и при написании Stored JavaScript приходится это учитывать, т.к. инты начинают превращаться в даблы). dimzonитого запрсы для модерирования (нечастые) будут выполняться "реляционным" образомКакой ещё "реляционный" образ? Создаёте пару индексов ( db.collection.ensureIndex() ): по идентификатору раздачи и по пользователю, - и делаете find по этим полям. dimzonосновной же "запрос" на получение раздачи с комментариями будет "получить раздачу по id" + "получить список комментариев по списку id"Логично :) dimzonАльтернативно обдумывал возможность внедрения массива комментариев внутрь раздачи, но не совсем понимаю как для модерации искать комменты конкретных пользователей...Даже и не думайте. Существует ограничение на размер документа (не более 16 МБ): MongoDB Limits and Thresholds . dimzonЕсть какие-либо замечания/предложения. Хчется получить максимально эффективный/высокопроизводительный продукт (для минимизации расходов на хостинг)Зачем тут MongoDB? :) Запаритесь разворачивать, администрировать и сопровождать. Плюс на хостингах любят брать деньги за место на диске, а MongoDB с определённого момента времени начинает аллоцировать файлы базы по 2 Гига, даже если вы всего 100 КБ добавили :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 10:46 |
|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
skyANAА чего не ElasticSearch? И NoSQL, и полнотекстовый поиск. монга вроде как менее к ресурсам требовательна skyANAЗачем? Где-то надо выводить количество комментариев? Какой ещё "реляционный" образ? Создаёте пару индексов (db.collection.ensureIndex()): по идентификатору раздачи и по пользователю, - и делаете find по этим полям. насколько я понимаю добавление новой строки (комментария) в индекс не мгновенно. т.е. сделав insert в последующем find-е можно свежевставленный документ не "поймать". То-то будет удивлен пользователь, который коммент к раздаче написал но не увидел. А так - явно добавил ID комментария в массив к раздаче и все... skyANAДаже и не думайте. Существует ограничение на размер документа (не более 16 МБ) Ну и сколько нужно настрочить комментариев дабы 16 мегабайт набралось? skyANAЗачем тут MongoDB? :) Запаритесь разворачивать, администрировать и сопровождать. Плюс на хостингах любят брать деньги за место на диске, а MongoDB с определённого момента времени начинает аллоцировать файлы базы по 2 Гига, даже если вы всего 100 КБ добавили :) Шардинг, горизонтальное масштабирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 17:28 |
|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
dimzonskyANAА чего не ElasticSearch? И NoSQL, и полнотекстовый поиск. монга вроде как менее к ресурсам требовательна skyANAЗачем? Где-то надо выводить количество комментариев? Какой ещё "реляционный" образ? Создаёте пару индексов (db.collection.ensureIndex()): по идентификатору раздачи и по пользователю, - и делаете find по этим полям. насколько я понимаю добавление новой строки (комментария) в индекс не мгновенно. т.е. сделав insert в последующем find-е можно свежевставленный документ не "поймать". То-то будет удивлен пользователь, который коммент к раздаче написал но не увидел. А так - явно добавил ID комментария в массив к раздаче и все...Вы это об text indexes? Как Вы себе полнотекстовый поиск по ID представляете? dimzonskyANAДаже и не думайте. Существует ограничение на размер документа (не более 16 МБ) Ну и сколько нужно настрочить комментариев дабы 16 мегабайт набралось?Разделите ведь на средний размер комментария :) Я откуда знаю, может у вас пользователи будут скрины к фильмам вставлять, или другие какие картинки в base64. dimzonskyANAЗачем тут MongoDB? :) Запаритесь разворачивать, администрировать и сопровождать. Плюс на хостингах любят брать деньги за место на диске, а MongoDB с определённого момента времени начинает аллоцировать файлы базы по 2 Гига, даже если вы всего 100 КБ добавили :) Шардинг, горизонтальное масштабирование.А какой не дорогой хостинг, включающий "шардинг, горизонтальное масштабирование" Вы выбрали, если не секрет? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 17:44 |
|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
Думаю что-нить типа Amazon EC итп на первое время (подкупает возможность увеличить мощность на время пиковой нагрузки) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 18:01 |
|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
skyANAВы это об text indexes? Как Вы себе полнотекстовый поиск по ID представляете? Ну я не спец в монге, в коучбейзе например все индексы асинхронно строятся (т.е. поиск всех комментариев к раздаче через индекс может давать подобную задержку) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 18:04 |
|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
dimzonДумаю что-нить типа Amazon EC итп на первое время (подкупает возможность увеличить мощность на время пиковой нагрузки)И какая нагрузка планируется? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 18:18 |
|
MongoDB - помогите со структурой данных
|
|||
---|---|---|---|
#18+
skyANA, хз, но принципиально горизонтальное масштабрование выдержит все, знай наращивай мощности - добавляй шарды ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2015, 18:27 |
|
|
start [/forum/topic.php?fid=48&msg=38961890&tid=1856827]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 428ms |
0 / 0 |