Я делаю загрузку из оракула, используя ODP.NET.
В своей текущей реализации код делает что-то вроде:
query entityIds to load based on criteria
foreach entityId
load attributes
query geometries that exist
foreach geometry that exists
load geometry
next
next
когда БД соответствует критериям локальной сети, для загрузки 133 объектов требуется несколько секунд, чтобы загрузить все 133 объекта.
Когда БД - это удаленная БД, размещенная на ВМ в центре обработки данных на другом конце света, для их загрузки требуется около 3,5 минут.
Особенно медленным представляется запрос геометрии. При первоначальном тестировании (в TOAD, а не в коде загрузки службы), кажется, требуется около 2 секунд, чтобы загрузить геометрию для одного объекта с помощью удаленного компьютера. Если мы изменим запрос, чтобы загрузить все геометрии за один раз, это все равно займет 2 секунды. Этот вид подразумевает, что это не служебная нагрузка сети (поскольку объем возвращаемых данных намного больше для запроса, который возвращает все геометрии, но время одинаковое).
Ожидается ли такая потеря производительности для удаленной базы данных по сравнению с локальной? Почему выполнение каждого запроса в отдельности занимает гораздо больше времени, чем выполнение их всех за один раз? Есть ли что-нибудь, что мы можем сделать, чтобы смягчить это (кроме выполнения всех запросов за один раз)?