Мне нужен мой клиент для загрузки 30 Мб файлов.
Ниже приведена настройка.
- Они состоят из 3000 маленьких файлов.
- Они загружаются через сокет tcp bsd.
- Они сохраняются в БД клиента по мере их загрузки.
- Сервер может хранить все необходимые файлы в памяти (нет доступа к файлам на стороне сервера)
IЯ не видел много случаев, когда клиент загружает такое большое количество файлов, которое я подозреваю из-за доступа к файлам на стороне сервера.
Меня также беспокоит, что мультиплексор (select / epoll) будет перегружен чрезмерной обработкой сетевых запросов.Мне нужно беспокоиться об этом?)
При вышеупомянутых подозрениях я сжал 3000 файлов до 30 файлов.(общий размер не сильно меняется, потому что файлы уже являются сжатыми файлами (png))
Как показывают тесты, загрузка 3000 файлов происходит на 25% быстрее, чем загрузка и разархивирование 30 файлов.
Я подозреваю, что это происходит из-за того, что клиентское устройствоне удается загрузить при распаковке и вставке в БД, я тестирую на портативных устройствах .. iPhone ..
(У меня была операция распаковки + операции с БД отдельно от сетевого кода, но, похоже, операция БД захватила всю системуЯ немного профилировал, и разархивирование не занимает много времени, вставка БД происходит. На стороне сервера файлы заранее заархивированы и помещены в память.)
Я думаю о том, чтобы вернуться к загрузке 3000 файловпотому что это быстрее для клиентов.
Интересно, что другие опытные сетевые люди скажут о двух стратегиях:
1. много маленьких данных
2. небольшое количество больших данных и распаковка.
EDIT
Для опытных разработчиков iphone я выполняю операцию с БД с помощью NSOperationQueue.
Действительно ли NSOperationQueue работает хорошо?
Я очень подозрительно отношусь к его производительности.
- Я попробовал нить posix, без существенной разницы ..