|
|
|||||
Регистрация: Mar 2012
Сообщений: 36
|
Вот так выглядит кусок БД:
Я формирую xml, через php:
Дальше происходит множество различных операций, одна из которых получение из всей БД списка игроков. Для этого и необходим цикл из 2500 итераций, так как я заношу первое имя в список, а последующие уже заносятся, если такого имени еще не было. В качестве примера вот эта функция: function ARR_IGROKOV():void { var win_zanos = false; var lose_zanos = false; arr_igrokov.push(String(xmllist[0].pobeditel)); for (var i=0; i<xmllist.length(); i++) { mass_matchey.push(String(xmllist[i].pobeditel),String(xmllist[i].proigravshiy)); win_zanos = false; lose_zanos = false; for (var t=0; t<arr_igrokov.length; t++) { if (String(xmllist[i].pobeditel)==arr_igrokov[t]) { win_zanos = true; } if (String(xmllist[i].proigravshiy)==arr_igrokov[t]) { lose_zanos = true; } if ((win_zanos==true)&&(lose_zanos==true)) { break; } } if (win_zanos==false) { arr_igrokov.push(String(xmllist[i].pobeditel)); } if (lose_zanos==false) { arr_igrokov.push(String(xmllist[i].proigravshiy)); } } arr_igrokov.sort(); } Я понимаю, что как то я не правильно делаю, что гружу всю БД, но я не понимаю как быть по другому. Решение разбивать пачками конечно есть, то ест цикл брать не 2500, а 5 циклов по 500 строк например, как говорил maincode, но это все таки как то не оптимально, да и наверно не везде получится применить. |
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
Что надо отображать за один раз то и надо дергать с сервера.
Добавлено через 3 минуты То есть можно определить интервал строк, выходя за который, идет запрос к серверу за порцией данных. |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Как же все запущено... scan по массиву вместо использования прямого отображения. И в результате вы имеете 2500*2500/2 операций вместо 2500. Используйте обычный map (оно же Object) с нужными ключами. Или два object'а (я особо не разбирался), оно на пару порядков быстрее работать будет. Может быть, оно и из базы правильно выбирается одним запросом, нужно понять что именно в результате вы хотите.
|
|
|||||
2 Fartoviy_Spec
А зачем вам тогда база данных, с таким подходом? Храните все данные в текстовом файлике. Результат будет абсолютно тот же самый. Но это сарказм, сорри. Сделайте несколько php-скриптов. Каждый из которых будет возвращать вам из вашей базы данных то, что нужно в определенный момент. Выборку же регулируйте через sql. Это мощнейший механизм, а вы его напрочь игнорируете. Например, для получения уникального списка игроков по двум колонкам, приведенным в примере: "select distinct * from (select pobeditel from ".$mysql_table." union select proigravshi from ".$mysql_table.") as p_table" Точно так же и с другими запросами. Не нужно нагружать клиента тем, что база сама сделает гораздо быстрее. А при том подходе, что у вас, подумайте - когда база дорастет до пары тройки гигабайт (а это вполне нормальный размер для базы), сколько времени будет тратиться на ее полную пересылку и обработку клиентом?
__________________
interplanety |
|
|||||
Korchy, а зачем конкатенация в запросах?
Лично мне составление запросов в php тем и нравится, что переменные можно прямо в строки добавлять, без конкатенаций и лишних заморочек. |
Часовой пояс GMT +4, время: 16:03. |
|
« Предыдущая тема | Следующая тема » |
|
|