|
|
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Добрый день! Возникла необходимость загрузки четко структурированного файла большого объема в таблицу. Так как использую компоненты ODAC, то грех не воспользоваться уже готовым компонентом. Только вот по примерам в демках не могу понять, каким именно образом в лоадер пищутся данные из файла. Вроде и не дремучий я, но все же... Небольшой кусок кода в качестве примера, как грузить данные из файла. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2019, 16:56 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, Для Loader: 1. Указать таблицу, правой кнопкой мыши на компонете выбрать Create Columns. 2. Определить GetColumnData или OnPutData. GetColumnData будет вызываться для каждой колонки от первой строки до тех пор пока не вернешь EOF := True Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. в OnPutData делаешь всю работу сам Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2019, 17:36 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Dmitri Krizhanovski, это я видел, меня интересует как с файлом работать. Или же открывать его в потоке и заливать построчно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 09:05 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Например... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 09:11 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
zinpubЛеонов Юрий, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Например... ну это понятно. Но у меня файлы большие... В теории могут быть по нескольку миллионов записей. А задача стоит ускорить заливку данных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 11:33 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
просто позанудствую: номер строки начинать с 1, а не с нуля, как в примере выше. procedure PutColumnData (by ColumnIndex) procedure PutColumnData (by ColumnName) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 11:50 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, Так она и ускорится, но без индексов и констрэйнов... Естественно для TOraLoader надо создать отдельный Session с ASyncMode'ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 12:09 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Кроик Семёнпросто позанудствую: номер строки начинать с 1, а не с нуля, как в примере выше. procedure PutColumnData (by ColumnIndex) procedure PutColumnData (by ColumnName) Эт да, подзабыл-скопипастил :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 12:10 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Гугли bulk load/bulk insert. Не факт, что это вообще на Делфи стоит делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 12:30 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Я это делал через TOraLoader во времянку, а потом процедура на серваке, которая раскидывала данные по местам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 12:36 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов Юрийну это понятно. Но у меня файлы большие... В теории могут быть по нескольку миллионов записей. А задача стоит ускорить заливку данных... Memory-Mapped Files и анализировать вручную?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 12:42 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
alekcvp, А чем помогут MemoryMapped files? Читать по одной записи и передавать компоненту... с кэшированием винда сама разбёрется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 12:46 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Или задача залить не все записи из файла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 12:47 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Человек не в состоянии разобраться как использовать готовый компонент, а вы предлагаете ему MMF и Direct Path... Оптимисты. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 12:55 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
zinpubИли задача залить не все записи из файла? В идеале файлов будет штук 15 разных. У каждого своя структура, есть общие поля. Но итоговая таблица общая (44 колонки), есть зависимость, какие данные куда надо ложить. Но записи должны залиться все, пропуски не запланированы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 14:25 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЧеловек не в состоянии разобраться как использовать готовый компонент, а вы предлагаете ему MMF и Direct Path... Оптимисты. Ну это же хорошо, что вы в этом разобрались. Или все должны родиться со знаниями возможностей компонент ODAC? До сегодняшнего дня мне этот компонент не был нужен. Вот теперь разбираюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 14:28 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Вопрос еще такой, для самоуспокоения: если надо, чтобы загрузка проходила частями частями, то в цикле вызывать метод Load? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 14:37 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийzinpubИли задача залить не все записи из файла? В идеале файлов будет штук 15 разных. У каждого своя структура, есть общие поля. Но итоговая таблица общая (44 колонки), есть зависимость, какие данные куда надо ложить. Но записи должны залиться все, пропуски не запланированы Тогда 15 -> OraLoader'ов, 15 -> Session'ов к ним качают во временные таблицы, асинхронно. После запускается процедура на сервере, которая агрегирует всё это счастье в итогувую таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 14:43 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийВопрос еще такой, для самоуспокоения: если надо, чтобы загрузка проходила частями частями, то в цикле вызывать метод Load? Load вызывается один раз, а конец итерации определяете в OnPutData ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 14:44 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
zinpubТогда 15 -> OraLoader'ов, 15 -> Session'ов к ним качают во временные таблицы, асинхронно. После запускается процедура на сервере, которая агрегирует всё это счастье в итогувую таблицу. Не пойму зачем асинхронность, если и столько лоадеров. Есть механизм распознавания, куда и что писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 14:46 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
zinpubПосле запускается процедура на сервере, которая агрегирует всё это счастье в итогувую таблицу. Осталось только придумать способ получить доступ к данным во временной таблице другой сессии. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 15:02 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийzinpubТогда 15 -> OraLoader'ов, 15 -> Session'ов к ним качают во временные таблицы, асинхронно. После запускается процедура на сервере, которая агрегирует всё это счастье в итогувую таблицу. Не пойму зачем асинхронность, если и столько лоадеров. Есть механизм распознавания, куда и что писать. Если данные(необходимые для загрузки) одинаковые во всех файлах, то количество потоков вещь подбираемая, в зависимости от сервера и того откуда берутся файлы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 15:02 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovzinpubПосле запускается процедура на сервере, которая агрегирует всё это счастье в итогувую таблицу. Осталось только придумать способ получить доступ к данным во временной таблице другой сессии. Я имел в виду ЛОГИЧЕСКИ временные таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 15:03 |
|
||
|
TOraLoader
|
|||
|---|---|---|---|
|
#18+
В смысле обычные таблицы, которые мы используем, как буферные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 15:04 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39838567&tid=2039211]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 521ms |

| 0 / 0 |
