AndreM

Рейтинг
47
Регистрация
12.09.2007
gerkon:
Знаем. glob отрабатывает довольно быстро и пхп не хватит памяти только в случае, если на сервере больше 500000 файлов примерно. И это при 8-метровом лимите на процесс.

какие то у вас файлы интересные, у меня по молодости glob на 100000 сжирал метров 20 с зависоном минут на 10, работало соответственно только на локалхосте с отключенным временным лимитом и памятью в 100 метров. Такие переборы лучше делать классическим примером из мануала по чтению папки.

Итак.

Условия: есть 1000 категорий в виде дерева, уровни вложения не ограничены. Хранится в базе, стуктура стандартная id, name, id_parent. Связанные списки и тд не трогаем, так как структуру менять нельзя, и иначе все рухнет.

Необходимо:

- получить полное дерево для селекта поиска;

- путь до текущей категории;

- раскрытое меню до текущей категории;

- доступ к названию любой категории;

Ваши предложения. Поехали ))

Коля Дубр:
было бы неплохо :)

Ладно, никто здесь никому не докажет, тему можно закрыть. Пойдемте в следующую, думаю будет интересно.

хорошо, давайте флеймить дальше...

ситуация: некто ищет решение задачи, пусть, например, какую либо работу с кэшем, где нужно обойти 100 000 файлов, и удалить/добавить инфу по ним в БД. Человек не знает, как оптимально это сделать, забивает в поисковик и смотрить - опа, на авторитетном форуме предлагают такое решение, и делает, а потом ему начальство и хостер дают по башке, когда БД и сайт падает... а прогер удивляется, он же на searchengines код взял, то есть это круто должно быть...

и таких примеров - тыща с хвостиком

ЗЫ. да в общем то пишите, как хотите, кто хотел - поинтересовался подробностями, не буду я ничего доказывать, все уже доказано проектами, в которых я участвую, и где посещалки более 100K в сутки, и людьми, которым я передал свой опыт. Спасибо за внимание.

ЗЫ2. Да, запросы в цикле остануться, только их будет меньше, раз в 500 в среднем, а соответственно и соединений с БД, которая при больших нагрузках иногда любит в середине работы выдавать max_user_connections

Хотя у меня настроение пофлеймить осталось, далее:

код: foreach (glob("*.*") as $filename) {

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

Коля Дубр:
Позволю себе немного пофлеймить :)

Во-первых, я настаиваю, что каждый, кто говорит об "индусском коде", "быдлокодерах" и т.д. обязан продемонстрировать публике хотя бы 20 строчек собственного кода. Чтоб сверить понятия о прекрасном.

Во-вторых, код обязан быть прагматичным, отсюда и мера его понятности, красоты и качества в целом. В нашем примере, ну, чтоб не быть индусами, надо бы накидать с десяток классов. Абстракцию для файла (с наследованными расширениями под разные ФС - а то мало ли...), DBAL + расширение для каждой известной БД. Плюс сам класс-манагер, с кучей проверок - по длине запроса, по времени выполнения и проч... Ну согласитесь, это скорее всего будет глупо смотреться. Потому что не прагматично. Потому что в задаче сказано, что у нас mysql, что файлов - несколько тысяч (т.е. за один прогон все прекрасно отрабатывается), и главное - скорее всего скрипт нужен одноразовый :)

Ну и напоследок. Вывод дерева через рекурсию - вполне имеет право на существование, а во многих случаях так и вовсе оптимален. Попробуйте убедить в обратном :)

1. здесь 20 строчек думаю многовато, хотите пообщаться поподробнее - велкам в аську, думаю наскребу вам примеров из проектов, хотя бы из того, что в подписи.

2. Пример вот, как разбить на порции писать не буду


// создаем поля для вставки
$values = array();
foreach ($my_category as $key => $val)
$values[] = "(".$id_company.", ".$key.", ".$val.", 0, ".$date.")";

// вставляем новые категории в текущую компанию
if ($values) db_query("INSERT INTO ".TAB_PREFIX."direct_categories (id_company, id_category, price, special, date) VALUES ".implode(', ', $values));

Чтобы не быть индуссами, не надо пихать в циклы запросы.

3. Дерево через рекурсию и должно быть, не должно быть запроса в рекурсивной функции. В этом Вас переубеждать не надо?

ответ "затем": затем, чтобы человек и дальше по-индусски не мыслил, учить хорошему надо )) хотя каждому свое, я просто прокомментировал...

AndreM добавил 02.10.2008 в 16:27

сегодня ему показали инсерты в цикле, а завтра он додумается рекурсивное дерево в цикле с запросами строить.

индусский код. несколько тыщ инсертов в цикле, надо же так придумать... вообще то нужно формировать данные и порциями, например штук по 500 вставлять в бд.

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

Ратник:
Поздравляю биржу с маленьким, но Днем рождения!

Спасибо! :)

менеджеры все в работе, срок вывода у нас заявлен до 5 суток, обычно от нескольких часов до 1-2 дней, максимум завтра обязательно все выплаты будут сделаны.

Всего: 271