Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эффективный алгоритм выборки данных, Необходимо сохранять данные по условию 
:(
    Опции темы
AGENTxXx
Дата 10.4.2014, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Добрый день, уважаемые форумчане!

Нужен Ваш совет!

Задача следующая:
В таблице authors хранятся авторы. У каждого автора есть значение accuracy. Нужны только такие авторы, у которых accuracy > 2. Через php мы получаем множество различных авторов со своими сообщениями. И нам необходимо проверить, если у этого автора accuracy > 2, то мы должны записать его сообщение, а если меньше - то не должны. Если автора нет, то мы добавляем его в таблицу с accuracy = 1.

Сам я вижу 2 алгоритма:
1 вариант) Загружаем в ассоциативный массив всех авторов и проверяем каждое сообщение на то, есть ли в ключах данного массива этот автор. Но тут проблема в том, что в настоящее время у меня 4000 целевых авторов. А через пару месяцев их может быть уже 50000. И я думаю, не слишком ли будет много памяти жрать данный массив;
2 вариант) Я сохраняю все записи в таблицу. И после того, как все записи сохранились я запускаю сложный запрос DELETE, который будет проверять, что если у автора accuracy <= 2, то удалить его сообщение. Но тут не эффективность в том, что я трачу время на запись так сказать "ненужных" данных в таблицу.

Надеюсь объяснил нормально и меня смогут понять.


Это сообщение отредактировал(а) AGENTxXx - 10.4.2014, 13:17
PM MAIL   Вверх
Akina
Дата 10.4.2014, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Первым этапом следует ВСЕ данные записать во временную таблицу на сервере. Обычный CREATE TEMPORARY TABLE ... SELECT ...
Вторым - выполнить добавление в таблицу авторов всех, кого там нет. Обычный INSERT INTO ... SELECT ...
Третьим - выполнить добавление сообщений в таблицу сообщений. Обычный INSERT INTO ... SELECT ... 
Все три запроса следует выполнять в одном connection.

Любая обработка на клиенте - ересь. За исключением одного случая - бОльшая часть сообщений написана авторами с accuracy = 1.

Если же данных очень много, они структурированы (CSV), и имеется возможность загрузить файл с данными на MySQL-сервер (скажем, по FTP) - лучше передать данные именно так, и на первом этапе использовать CREATE TEMPORARY TABLE + LOAD DATA INFILE.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
AGENTxXx
Дата 10.4.2014, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Спасибо за совет! Думаю что так и сделаю (через временную таблицу)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.