2011-01-25 3 views
0

У меня есть flex webapp, который извлекает некоторые имена & адресов из базы данных. Проект работает отлично, но я бы хотел сделать это быстрее. Вместо того, чтобы обращаться к базе данных для каждого запроса на имя, я мог предварительно загрузить все имена в массив & фильтровать массив, когда пользователь делает запрос. Прежде чем перейти на этот маршрут, хотя я хотел проверить, возможно ли иметь приложение с 50 000 или 1 миллионом элементов в массиве? Каков предел b/f, это замедляет приложение? (Я ожидаю, что у меня будет много дел с тем, что еще происходит в моем приложении, но ради этого просто предположим, что приложение ТОЛЬКО состоит из этого огромного массива).Сколько данных слишком много для массива?

ответ

1

Да, вы могли бы набить несколько миллионов предметов в массив, если хотите, и Flash-плеер не будет кричать на вас. Но ты действительно хочешь?

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

Если у вас есть хороший прецедент для этого, вам нужно обратить внимание на то, как вы используете эти структуры данных. Цитирование по массиву, чтобы найти элемент, будет немного медленным, поэтому вы хотите создавать индексы локально, скорее всего, используя несколько структур хэша. Чем более гибкими вы позволяете поисковые запросы, тем интереснее будут проблемы с индексацией.

+0

«так что вы хотите локально создавать индексы» ... что вы имеете в виду? –

+0

Я имею в виду создание структур объектов, которые используют соответствующий индекс в качестве своего ключа и указывают на область вашего массива. Например, если ваш массив отсортирован соответствующим образом, у вас может быть объект с одним буквенным ключом, причем каждый ключ указывает на первый индекс в вашем большом массиве, у которого есть определенное поле, начинающееся с этой буквы. Используя этот объект и перейдя через большой массив, начиная с позиции, связанной с данной буквой, у вас будет эффективный способ быстро найти все записи с полем, начинающимся с этой буквы. Вы можете представить индекс, используя целые имена в качестве ключей, и т. Д. – Metal

+0

звучит интересно. Куда я могу найти пример? –

2

Поиск через большой массив может быть медленнее, чем необходимо, особенно если вы говорите о миллионах записей.

Можете ли вы разбить его на несколько небольших массивов с меньшим размером? Если вы всегда ищете номер учетной записи, разделите их на первую цифру или две цифры.

Чтобы ответить прямо на ваш вопрос, чистая обработка AS3 массива элементов размером 50 000 должна быть прекрасной. Как только вы получите более 250 000, я думаю, вам нужно разбить его.

Отображение того, что многие элементы интерфейса отличаются друг от друга. Если вы попытаетесь привязать диаграмму к dataProvider с 10 000 элементами, это слишком много. То же самое для списка или datagrid.

Но для чистых данных модели, а не для ui, я бы рекомендовал до 250 000 в моем опыте.

2

Если загрузка больших объемов данных (не уверен, что если вы используете списки, хотя), вы могли бы проверить Джеймс Wards пост об использовании AsyncListView с пейджинга, чтобы захватить данные в chuncks в его необходимости. Собираюсь попробовать что-то подобное скоро. В его примерном примере используется 100 000 строк с пейджингом 100 (работает с вызовами типа HttpService/AMF): http://www.jamesward.com/2010/10/11/data-paging-in-flex-4/

Смежные вопросы