|
Данные из clob посредством odp.net
|
|||
---|---|---|---|
#18+
Доброе время суток. С Oracle практически не знаком.Для одной разовой задачи приходится получать данные типа SDO_Geometry в приложении на .net. SDO_Geometry преобразуется в Wkt, т.к. непосредственного аналога SDO_Geometry в odp.net я не нашёл. В сети есть кастомные объекты, чтобы SDO_Geometry можно было получить через odp.net, но этим пока не занимались. Вопрос в производительности получения данных типа CLOB/BLOB. Сам запрос выполняется сервером достаточно быстро (заметно меньше секунды). А вот получить данные на клиенте с помощью OracleDataReader (сборка Oracle.ManagedDataAccess.dll) ,быстро не получается. Вернее, чтение данных типа number , varchar2 и т.д. и т.п. (не CLOB/BLOB) происходит приемлемое время, а вот CLOB/BLOB безумно тормозят. Данные такие: примерно 50000 записей. Получаем только id (number) и shape (SDO_Geometry).Общий объём данных порядка 150мб Такой же объём данных (не записей, а именно объём данных) составленный из varchar2 читается в разы быстрее (clob-ы могут читаться до нескольких минут, а "простые" данные-несколько секунд). Попытки прочитать CLOB осуществлялись разными методами класса OracleDataReader (Например: GetOracleClob,GetTextReader). Пытались поменять FetchSize. Сами функции (например GetOracleClob) отрабатывают быстро, но они, похоже, не читают тело clob, а скорее, только адрес и далее если читать сам clob, то всё проседает. Аналогичные данные, но на PostgreSql, на тех же самых каналах читаются в разы быстрее. На Oracle более-менее приемлемую производительность чтения данных удалось получить только преобразуя данные в xml , с группировкой по 5 тыщ, тогда происходит меньше итераций чтения и всё более-менее работает, а запрос на сервере, повторюсь, работает быстро. Не подскажите , что можно попробовать для увеличения производительности чтения CLOB/Blob? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 12:57 |
|
Данные из clob посредством odp.net
|
|||
---|---|---|---|
#18+
UVGПопытки прочитать CLOB осуществлялись разными методами класса OracleDataReader (Например: GetOracleClob,GetTextReader). ... Не подскажите , что можно попробовать для увеличения производительности чтения CLOB/Blob? Кошерная документация указывает, что надо использовать: для CLOB - переменную типа String (для 150 мб максимальной размерности хватит с избытком для любой кодировки) и метод GetString; для BLOB - массив byte[] и метод GetBytes (заполнение в цикле) см. пример кода и подробную документацию здесь ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2019, 01:22 |
|
Данные из clob посредством odp.net
|
|||
---|---|---|---|
#18+
FogelКошерная документация указывает, что надо использовать: для CLOB - переменную типа String (для 150 мб максимальной размерности хватит с избытком для любой кодировки) и метод GetString; Спасибо. Эти методы тоже рассматривались, но результат плачевный. Возможно, есть какие-то опции для работы с clob-ами Oracle или, может быть, лучше использовать какой-нибудь другой провайдер? Не обязательно для .net. Мы можем воспользоваться и чем-нибудь другим, а потом подцепить как сервис, возможно так буде быстрее. Просто, хотелось бы , использовать технологию, которая, гарантированно, даёт приемлемые результаты. Если кому приходится тянуть несколько десятков тысяч clob-ов за раз, то что используете? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 11:54 |
|
Данные из clob посредством odp.net
|
|||
---|---|---|---|
#18+
UVGчто используете? OCI. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 12:21 |
|
|
start [/forum/topic.php?fid=52&msg=39859260&tid=1882109]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 271ms |
total: | 419ms |
0 / 0 |