Мы храним данные приложения Apple в базе данных (http://www.apple.com/itunes/affiliates/resources/documentation/itunes-enterprise-partner-feed.html).Рекомендации по модели данных для коллекции Mongo, которая содержит сложные объекты
Мы хотим оптимизировать для одного типа запросов: найти все приложения, соответствующие определенным критериям. критерии: (1) средний рейтинг приложения; (2) количество рейтингов приложений; (3) устройства, поддерживаемые приложением; (4) страны, в которых продается приложение; (5) текущая цена приложения; и (6) дата, когда приложение поступило бесплатно. запрос должен быть как можно быстрее. Пример запроса: «найти все приложения с рейтингом 600, в среднем 5 звезд, поддерживает iPads и iPhone, продается в США и снизил их цену до $ 0.00 два дня назад».
на основе схемы яблока, есть информация о ценах для каждой страны. предполагая, что яблоко поддерживает 100 стран, каждое приложение будет иметь 100 цен - по одному для каждой страны. мы также должны хранить исторические цены для каждого приложения, то есть приложение с 10 изменениями цены будет иметь 1000 цен (в случае 100 стран).
три вопроса:
1) как вы посоветуете нам хранить данные о ценах в Монго, чтобы сделать запросы быстро? прямо сейчас, мы думаем хранить цены в виде массива объектов. каждый объект состоит из трех элементов: (1) дата; (2) страна; (3) цена.
2) если мы храним данные о ценах как объекты в массиве, что нам нужно сделать, чтобы сделать поиск по данным цены очень быстрым. опять же, общий поиск цен - это нечто вроде «найти все приложения, которые снизили свою цену до $ 0.00 2 дня снова в магазине США».
3) любые ошибки, которые мы должны помнить при хранении данных?
спасибо! если мы сохраним данные о ценах в отдельном поле, разве мы не потеряем много монгонских сил и скорости? наше понимание заключается в том, что монго нуждается в том, чтобы данные в рамках одной коллекции существовали оптимально. – Crashalot
Я так не думаю. это все о оптимизации для шаблонов доступа, которые вы ожидаете ... главный принцип: избегать всего, что пахнет реляционным соединением, * особенно * в ответ на каждый запрос конечного пользователя. на основе вашего описания, похоже, что для большинства запросов будет достаточно общих данных; лучше всего разрешить столько страниц, сколько возможно, сразу поместиться в ОЗУ. – dampier