Расчет цены на приложения или бесплатные приложения - App Store - PullRequest
0 голосов
/ 21 декабря 2011

Я работаю над сайтом, на котором отображаются все приложения из App Store. Я получаю данные AppStore через их EPF Data Feeds через 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 строк

Ответы [ 3 ]

2 голосов
/ 21 декабря 2011

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

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

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


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

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

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

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

1 голос
/ 21 декабря 2011

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

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

0 голосов
/ 21 августа 2013

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

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

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

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...