[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обработка 50000 записей
Rand
Задача:
Есть список из 50000 хостов вида "Хост#Дата".
Если сайт посещает неизвестный хост, добавляем его в список, иначе проверяем прошло ли с его посещения больше суток, если прошло, заменяем дату на текущею.

Пробовал уже по разному - текстовый файл и mysql.
Первый вариант на файлах - использовать fopen+fgets - память кушает мало, примерно 320кб, но возникает проблема с обновлением даты, чтобы не загружать тяжелый файл в память, создаю временный файл и заношу туда все левые хосты, в конец файла пишу новый хост или хост у которого надо изменить дату. Скрипт работает очень медленно.
Второй вариант на файлах - использовать функции file(), fread() и другие подобные функции, тем самым загружая тяжелый файл целиком в оперативу. Скрипт выполняется быстро, но вот память потребляет около 3-4мб.
Третий вариант на mysql - скорость меньше, чем если бы я загружал текстовый файл в оперативу и потребление памяти ~6мб. Зато удобно.

В общем вопрос - чем жертвовать, памятью или скоростью? Есть ли у вас какие-нибудь примерные алгоритмы работы с таким количеством данных, при условии, что скрипт будет выполнятся очень часто?



Спустя 37 минут, 55 секунд (16.06.2010 - 00:41) twin написал(а):
Цитата
и потребление памяти ~6мб.

О какой памяти речь?

Спустя 6 часов, 48 минут, 16 секунд (16.06.2010 - 07:29) Basili4 написал(а):
Тут однозначно надо использовать mysql 50000 в одной табле это даже не нагрузка. И скорость работы будет выше так СУбД испльзует более оптимизированные механизмы работы с файлами.

Спустя 10 минут, 23 секунды (16.06.2010 - 07:39) olgatcpip написал(а):
Rand Чет я не поняла. А чем БД не понравилась? Я уверяю тебя. пожертвуешь парочкой индексов и залетает!

Спустя 1 час, 52 минуты, 56 секунд (16.06.2010 - 09:32) Rand написал(а):
Всё ребята. Сегодня утром проснулся и понял, что вчера перегрелся. Зачем-то выбирал все записи из таблицы и делал тесты, хотя мне это в принципе не нужно. biggrin.gif Ну хоть одно хорошо - протестировал скорость работы с файлами )) Делаю на мускуле. Всем спасибо.

Цитата
О какой памяти речь?

Которую использовал скрипт, memory_get_usage().

Спустя 3 часа, 35 минут, 35 секунд (16.06.2010 - 13:08) FatCat написал(а):
Цитата (Rand @ 16.06.2010 - 01:03)
Есть список из 50000 хостов вида "Хост#Дата".

Для других задач и с другой структурой сейчас активно работаю с базой в 2 000 000 записей.
На файлах оно в принципе работать не будет...

Спустя 1 день, 11 часов, 19 минут, 52 секунды (18.06.2010 - 00:28) gzim9x написал(а):
Цитата
Для других задач и с другой структурой сейчас активно работаю с базой в 2 000 000 записей.
На файлах оно в принципе работать не будет...


Вы очень категоричны... я конечно не знаю особенности вашей архитектуры -- но файловая система позволяет хранить и не такое количество записей. В конце концов их же несколько... со своими особенностями, -- та же RaiserFS позволяет сократить доступ к небольшим файлам. При больших объемах данных, как правило, наоборот отказываются от БД -- например, Google File System.

Спустя 9 минут, 22 секунды (18.06.2010 - 00:37) Nikitian написал(а):
gzim9x
Всё зависит от задач. Если есть выборка по имени данных со структуризацией - тут файловая система подойдёт, а если есть сложная выборка по куче параметров, то без бд тут никак, только если просматривать все записи, что бред.

Спустя 31 минута, 34 секунды (18.06.2010 - 01:09) FatCat написал(а):
Цитата (gzim9x @ 18.06.2010 - 01:28)
Вы очень категоричны... я конечно не знаю особенности вашей архитектуры -- но файловая система позволяет хранить и не такое количество записей.

Задача не в сохранении, задача в получении нужных записей по запросу.
MySQL поиском по индексированному числовому полю находит сотню результатов из двухмиллионного массива за... 0,05 секунды. php для чтения по двум миллионам строк из файла понадобится страшно подумать сколько времени.

Спустя 27 минут, 7 секунд (18.06.2010 - 01:36) gzim9x написал(а):
Nikitian, FatCat
вы правы! все верно!
Но... сравнивать проход по индексам и полнотекстовый поиск по файлам немного некорректно. В файловых записях имя файла может играть роль индекса, и, тогда даже простой shell'овый, скрипт показывает неплохие результаты.
В случае если таблица должна хранить сотни миллиардов записей... не один раз подумаешь где эти данные хранить, а о сложных запросах с таким количеством данных я вообще молчу.

Спустя 22 минуты, 4 секунды (18.06.2010 - 01:58) Nikitian написал(а):
Цитата (gzim9x @ 17.06.2010 - 22:36)
В случае если таблица должна хранить сотни миллиардов записей... не один раз подумаешь где эти данные хранить, а о сложных запросах с таким количеством данных я вообще молчу.

В этом топике озвучен лимит в 50к записей.
Сталкивались с манипуляциями сотнями миллиардов записей? Опишите задачи, используемые технологии в решениях - всем интересно. А теоретизировать когда задан конкретный вопрос, не к месту.

Спустя 30 минут, 5 секунд (18.06.2010 - 02:28) gzim9x написал(а):
Цитата
В этом топике озвучен лимит в 50к записей.
Сталкивались с манипуляциями сотнями миллиардов записей? Опишите задачи, используемые технологии в решениях - всем интересно. А теоретизировать когда задан конкретный вопрос, не к месту.


В этом топике также прозвучала цифра в 2000000 записей и выражено мнение что хранение данных в файлах отстой. Именно поэтому я и решил написать что все зависит от архитектуры (с чем я так понял вы и были согласны). А то что у кого-то PHP медленно проходит по файловой системе -- это не проблема файлов -- это проблема PHP и алгоритмов -- ничто не мешает вынести код в отдельный .so-модуль на С -- и вызывать из PHP по мере надобности. Для 50к -- согласен -- не стоит огород городить -- но и на файлы не нападайте!

Спустя 8 часов, 38 минут, 57 секунд (18.06.2010 - 11:07) FatCat написал(а):
Цитата (gzim9x @ 18.06.2010 - 02:36)
В файловых записях имя файла может играть роль индекса

Аналогично в MySQL имя таблицы может играть роль индекса. rolleyes.gif

Спустя 2 часа, 40 минут, 4 секунды (18.06.2010 - 13:47) SlavaFr написал(а):
@gzim9x в общем то не отговаривал пользоватся mysql, а просто обяснил, что возможност работы с файлами тоже существует и может действительно оказатся более оптимальной чем использование Б.Д.
К стате в этом он абсолютно прав, так как Б.Д тоже работает с файлами, но дополнительно загружена SQL- парзерами, Сервером, Правами и другими подпрограммами которые создают удобства в работе с Базой.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.