Скачать несколько файлов вместо одного большого файла и разархивировать через сокет

Мне нужно, чтобы мой клиент скачал 30 Мб файлов.

Ниже приводится настройка.

  1. Они состоят из 3000 небольших файлов.
  2. Они загружаются через сокет tcp bsd.
  3. Они сохраняются в базе данных клиента по мере загрузки.
  4. Сервер может хранить в памяти все необходимые файлы.(нет доступа к файлам на стороне сервера)

Я не видел много случаев, когда клиент загружал такое большое количество файлов, что, как я подозреваю, связано с доступом к файлам на стороне сервера.
Меня также беспокоит, что мультиплексор (select / epoll) будет перегружен из-за чрезмерной обработки сетевых запросов. (Мне нужно об этом беспокоиться?)

С указанными выше подозрениями я застегнулся 3000 файлов до 30 файлов. (общий размер не сильно меняется, потому что файлы уже являются сжатыми (png))

Тест показывает, загрузка 3000 файлов на 25% быстрее, чем загрузка и распаковка 30 файлов.
Я подозреваю, что это связано с тем, что клиентское устройство не может загрузить при распаковке и вставке в БД, я тестирую на портативных устройствах .. iPhone ..
(Я подключил разархивирование + операция БД отдельно от сетевого кода, но операция БД, похоже, берет на себя всю систему. Я немного профилировал, и разархивирование не занимает много времени, вставка БД делает. На стороне сервера файлы архивируются и помещаются в память заранее .)

Я собираюсь вернуться к загрузке 3000 файлов, потому что это быстрее для клиентов.

Интересно, что скажут другие опытные сетевые специалисты по двум стратегиям,
1. много небольших данных
2. небольшое количество больших данных и распаковка.

РЕДАКТИРОВАТЬ

Для опытных разработчиков iphone: я распределяю операцию БД с помощью NSOperationQueue.
Действительно ли NSOperationQueue хорошо справляется с потоками?
Я очень подозрительно отношусь к его производительности.
- Я пробовал использовать поток posix, разницы нет ..

6
задан eugene 21 October 2011 в 13:47
поделиться