2011-12-21 5 views
0

Я работаю на веб-сайте, на котором отображаются все приложения из App Store. Я получаю данные AppStore по своим каналам передачи данных EPF через EPF Importer. В этой базе данных я получаю оценку каждого приложения для каждого магазина. Есть десяток строк в этом наборе данных, чья структура таблицы, как:Расчет снижения цен Приложения или приложения собираются бесплатно - Магазин приложений

application_price 

The retail price of an application. 

Name   Key Description 

export_date   The date this application was exported, in milliseconds since the UNIX Epoch. 
application_id Y Foreign key to the application table. 
retail_price  Retail price of the application, or null if the application is not available. 
currency_code  The ISO3A currency code. 
storefront_id Y Foreign key to the storefront table. 

Это таблица я получаю теперь моя проблема заключается в том, что я не получаю никакого выхода, что, как я могу рассчитать снижение цен приложений и новых бесплатных приложений из этого конкретного набора данных. Может ли кто-нибудь понять, как я могу его вычислить? Любая идея или ответ будут высоко оценены.

Я попытался сохранить предыдущие данные и текущие данные, а затем попытался их сопоставить. Проблема заключается в том, что сама таблица слишком большая, и сравнение вызывает операцию JOIN, которая делает время выполнения запроса более чем на час, что я не могу себе позволить. есть около 60 000 000 рядов в таблице

ответ

2

С этими полями вы не можете напрямую определить падение цен или новое приложение. Вам нужно будет вставить их в свою собственную базу данных и определить различия оттуда. В реляционной базе данных, такой как MySQL, это не слишком сложно:

Чтобы определить, какие приложения являются новыми, вы можете добавить свой собственный столбец «first_seen», а затем запросить свою базу данных, чтобы показать все объекты, где столбец first_seen больше не является затем на целый день.

Чтобы рассчитать снижение цен, вам нужно будет рассчитать разницу между розничным_центом текущего импорта и предыдущим импортом.


Поскольку вы изменили ваш вопрос, мой отредактированный ответ:

Похоже, у вас возникли проблемы хранения/производительность, и вы знаете, что вы хотите достичь. Чтобы решить эту проблему, вам придется начать измерение и отладку: с такими наборами данных вам нужно будет убедиться, что у вас есть правильные индексы. Профилирование ваших запросов должно помочь выяснить, что они делают.

И, вероятно, ваша среда «пишет один раз в день» и читает «много раз в минуту». (Я предполагаю, что вы создаете веб-сайт). Таким образом, вы можете ускорить интерфейс, обработав различия (снижение цен и новое приложение) при импорте, а не при отображении на веб-сайте.

Если вы все еще не можете решить эту проблему, я предлагаю вам открыть более конкретный вопрос, детализируя ваши СУБД, запросы и т. Д., Чтобы реальные администраторы баз данных могли вам помочь. 60 миллионов строк много, но с правильными индексами это не должно быть реальной проблемой для нормальной системы баз данных.

+0

спасибо за ответ. см. мое редактирование – Astha

+0

См. также мое редактирование ;-) –

1

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

Для всего 60 миллионов предметов и на современном ПК вы должны иметь возможность хранить отсортированный массив номеров идентификаторов магазина и предыдущих цен в памяти и выполнять поиск массива быстрее, чем данные поступают из сетевого канала. Отметьте обнаруженные различия и дважды проверьте их на БД в пост-обработке.

+0

благодарит за ответ. см. мое редактирование – Astha

0

На самом деле я также пытаюсь играть с этими данными, и я думаю, что лучший подход для вас основывается на данных Apple.

У вас есть 2 типа данных: полный и инкрементный (обновленные данные ежедневно).Таким образом, в новых данных из инкрементальных (не очень больших, как полно) вы можете сравнить только обновленную запись и вставить их в другую таблицу для определения цены.

Итак, у вас есть список записей (приложение, песня, видео ...), обновляемых ежедневно с изменением цены, просто получите данные из новой таблицы, которую вы создали, вместо того, чтобы сравнивать или присоединяться к ним из разных таблиц.

Cheers

Смежные вопросы