Скачать несколько файлов против одного большого файла и распаковать через сокет - PullRequest
6 голосов
/ 21 октября 2011

Мне нужен мой клиент для загрузки 30 Мб файлов.

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

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

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

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

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

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

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

EDIT

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

1 Ответ

1 голос
/ 28 октября 2011

Я отвечаю на свой вопрос.

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

http://www.sqlite.org/faq.html#q19

После того, как я принял предложение в FAQ, чтобы ускорить «много вставок», оно фактически превосходит «стратегию загрузки множества файлов по отдельности».

...