Как улучшить задержку сервера CloudKit при загрузке данных
Мне трудно загружать данные в мой контейнер CloudKit в серии операций «изменить записи». В моем приложении есть функция «загрузчик», которая может заполнять частную базу данных CloudKit большим количеством пользовательских данных. Я группирую записи в несколько
CKModifyRecordsOperations
, максимум 300 записей в каждой операции, прежде чем я их загружу. Когда я делаю это с небольшим количеством данных (даже менее 50 МБ), простая загрузка может занять десятки минут. Это включает в себя надежную логику повторных попыток, которая
CKErrorRetryAfterKey
ключ от любых операций с истекшим временем ожидания и воспроизводит их после задержки (что часто случается после).
Я проверил панель мониторинга CloudKit, и для раздела телеметрии контейнера «задержка сервера» кажется очень высокой (более 100 000 для 95% процентиля). Это также предполагает, что «средний размер запроса» составляет в среднем 150 КБ за последние несколько дней, поскольку я тестировал это, что не кажется большим, но время ответа сервера составляет в среднем 10 секунд на каждую операцию! Это кажется очень медленным.
Я пытался регулировать запросы, чтобы за раз отправлялось только 20 операций изменения, но, похоже, это не помогает. У меня есть «запросные» индексы для поля «recordName» для каждого типа записи и «запрос, доступный для поиска, сортируемый» для некоторых настраиваемых полей в типах записей (хотя и не для всех). В конфигурациях CKModifyRecordsOperations для параметра qualityOfService установлено значение «userInitiated». Но ничего из этого не помогает. Я не уверен, что еще я могу попытаться улучшить время «загрузки» (кажется, что загрузка записей происходит, как и ожидалось).
Есть ли что-нибудь еще, что я могу попытаться сократить время, необходимое для загрузки нескольких тысяч записей? Или это вне моего контроля?