Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.06.2013, 22:17
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 11  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
2500 в цикле приложения? Тогда понятно. А для PHP 2500 иттераций не так уж и много. Хотя смотря какая база, какой хостинг и т. п.
__________________
In Code We Trust

Старый 14.06.2013, 22:47
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 12  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Babylon Посмотреть сообщение
Уверен AlexCooper, что вы ошибайтесь
Возможно. Взглянуть бы на структуру, уверен там косяк в архитектуре.
__________________
return this...

Старый 14.06.2013, 22:57
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 13  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
2500 в цикле приложения? Тогда понятно.
2500 это вообще ни о чем.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 14.06.2013, 23:11
Fartoviy_Spec вне форума Посмотреть профиль Отправить личное сообщение для Fartoviy_Spec Найти все сообщения от Fartoviy_Spec
  № 14  
Ответить с цитированием
Fartoviy_Spec

Регистрация: Mar 2012
Сообщений: 36
Вот так выглядит кусок БД:

Я формирую xml, через php:
PHP код:
<?php
...
$sql=@mysql_query('SELECT * FROM `'.$mysql_table.'`') or die(mysql_error());
echo 
"<?xml version='1.0' encoding='UTF-8' ?>";
echo 
"<response>";
for (
$i=0;$i<mysql_num_rows($sql);$i++)
{
$res=mysql_fetch_array($sql);
echo 
"<block>";
echo 
"<turnir>".$res['turnir']."</turnir>";
echo 
"<nomer_kruga>".$res['nomer_kruga']."</nomer_kruga>";
echo 
"<pobeditel>".$res['pobeditel']."</pobeditel>";
echo 
"<proigravshiy>".$res['proigravshiy']."</proigravshiy>";
echo 
"<shet>".$res['shet']."</shet>";
echo 
"<total>".$res['total']."</total>";
echo 
"<ochki_pobeditel>".$res['ochki_pobeditel']."</ochki_pobeditel>";
echo 
"<ochki_proigravshiy>".$res['ochki_proigravshiy']."</ochki_proigravshiy>";
echo 
"</block>";
}
echo 
"</response>";
?>
И получившийся xml полностью загружаю в приложение. Приложение я делаю для себя, то есть денвер использую просто для того, чтобы была возможность работать с БД.

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

В качестве примера вот эта функция:
Код AS3:
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, но это все таки как то не оптимально, да и наверно не везде получится применить.
Миниатюры
Нажмите на изображение для увеличения
Название: БД.PNG
Просмотров: 204
Размер:	31.7 Кб
ID:	29700  

Старый 14.06.2013, 23:22
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 15  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Что надо отображать за один раз то и надо дергать с сервера.

Добавлено через 3 минуты
То есть можно определить интервал строк, выходя за который, идет запрос к серверу за порцией данных.

Старый 14.06.2013, 23:36
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 16  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Как же все запущено... scan по массиву вместо использования прямого отображения. И в результате вы имеете 2500*2500/2 операций вместо 2500. Используйте обычный map (оно же Object) с нужными ключами. Или два object'а (я особо не разбирался), оно на пару порядков быстрее работать будет. Может быть, оно и из базы правильно выбирается одним запросом, нужно понять что именно в результате вы хотите.

Старый 15.06.2013, 09:38
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 17  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
2 Fartoviy_Spec

А зачем вам тогда база данных, с таким подходом? Храните все данные в текстовом файлике. Результат будет абсолютно тот же самый. Но это сарказм, сорри.

Сделайте несколько php-скриптов. Каждый из которых будет возвращать вам из вашей базы данных то, что нужно в определенный момент. Выборку же регулируйте через sql. Это мощнейший механизм, а вы его напрочь игнорируете.
Например, для получения уникального списка игроков по двум колонкам, приведенным в примере:
Код:
"select distinct * from (select pobeditel from ".$mysql_table." union select proigravshi from ".$mysql_table.") as p_table"
такой запрос на сервере для б.д. в 2500 записей выполняется за сотые доли секунды и вы получаете список, который уже можете преобразовать в xml и отослать флеш-клиенту.
Точно так же и с другими запросами. Не нужно нагружать клиента тем, что база сама сделает гораздо быстрее.
А при том подходе, что у вас, подумайте - когда база дорастет до пары тройки гигабайт (а это вполне нормальный размер для базы), сколько времени будет тратиться на ее полную пересылку и обработку клиентом?
__________________
interplanety

Старый 15.06.2013, 11:44
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 18  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Korchy, а зачем конкатенация в запросах?
Лично мне составление запросов в php тем и нравится, что переменные можно прямо в строки добавлять, без конкатенаций и лишних заморочек.
Код:
"select distinct * from (select pobeditel from `$mysql_table` union select proigravshi from `$mysql_table`) as p_table"

Старый 15.06.2013, 11:46
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 19  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
а зачем конкатенация в запросах?
Не все версии PHP поддерживают такой синтаксис. Рекомендуется использовать конкатенацию, чтобы было наверняка. Меня за такое побили по рукам наши кодеры )
__________________
тут я

Старый 15.06.2013, 11:57
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 20  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Понятно) значит я уже на тех, что не поддерживают не кодил

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:03.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.