powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Выгрузка из базы
12 сообщений из 37, страница 2 из 2
Выгрузка из базы
    #39735310
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кареглазая_зая,

Загружаете вы или они? И имеется ли вариант написать на том же Delphi для них свой загрузчик?
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735410
Vlad F, они. Какой загрузчик? Мы можем передать только обезличенные данные, по сути в любом формате
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735414
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кареглазая_зая,

Если в любом, то сможете ли передать (с тем, чтобы они потом переварили) в cds-формате, который есть ClientDataset.SaveToFile()?
Тогда бы все сильно упростилось.
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735415
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кареглазая_зая,

https://stella-npf.ru/download/zls_sql-exe/

Модератор: Тема перенесена из форума "Firebird, InterBase".
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735474
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 - вынести присвоение текстов запросов за цикл
2 - не переоткрывать файл на каждую строчку
3 - закомментировать WriteString и посмотреть, сколько займет выборка, чтобы понять, что тормозит именно она
4 - выборка из одной БД по набору ключей из другой БД, на самом деле, не так уж тривиальна. Пока что мне приходит в голову
а) генерация списка из 10-20 значений для подстановки в select .. where .. in (..,..,..) - чисто клиентское решение, но не особо хорошее
б) добавление всех ключей во временную таблицу в БД2 и потом уже выборка одним запросом - потребует изменений в БД
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735608
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть возможность сначала сделать средствами самой базы результирующую таблицу и потом тупо выбирать ее в TStringList и сохранять через TStringsList.SaveToFile? Если прямолинейно подходить и задача разовая, то я бы, наверное, именно так и начал. Ну и компилил в 64 бита, т. к. пугает перспектива Out of memory. Вариант, порезать кусков на 10 и потом склеить. Для TStringList сразу ставить нужную емкость.

При обращении к полям на таких объемах разумеется никаких FieldByName. Склейку можно делать через TStringBuilder, но что-то мне подсказывает выигрыш от него будет ничтожен на фоне затрат на запись в файл.
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735623
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильное замечание насчет FieldByName, но это всё копейки на фоне 15М выполнений запросов
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735640
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому и говорю, что лучше сначала создать в самой базе одну таблицу, которую можно экспортировать элементарным перебором.

При этом у меня вопросы относительно того, как себя поведет тот же TStringList на 15 млн строк тоже есть. Я недавно делал простейший самоочищающийся лог через TMemo, изначально у меня при превышении N строк удалялась нулевая, но это даже при 1000 строчек запросто вгоняло проц в 100% загрузку при отправке в Memo полусотни строк в секунду. Просто на перераспределении памяти и переборе всех этих строчек с их счетчиками ссылок.

Автор не пишет, какая у нее версия Delphi, здесь я вижу потенциальную подлянку, что в базе могут быть обычные строки, а в Delphi юникодовые. Или наоборот. Возможно, есть смысл, сразу выделить память под короткие строки, если их достаточно, и потом ручками через Stream писать.
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735641
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2на фоне 15М выполнений запросов
Да их тут даже не 15М, а 30М... к БД1 тоже каждый раз обращение. Эту выборку надо объединить, сразу вычерпывая в dsetReestr2 все нужные поля.
То есть
Код: pascal
1.
2.
3.
4.
5.
for...
  for...
    myDataModule.dsetReestr2.SelectSQL.Text := 'Select npolis, dr, ....' - //тут я получаю ключевые поля записей которые нужно выгрузить
    while not myDataModule.dsetReestr2.Eof do
    ...заполнение и открытие myDataModule.DPolis (здесь думать дальше)



На месте "(здесь думать дальше)" - уже более интересные вещи. Как ни выжимай скорость, один запрос со всей обвязкой займет пусть 100 мс. 15М таких запросов - 17 суток. Поэтому надо всеми силами сокращать количество запросов.
Для этого надо знать, доступно ли изменение схемы БД2, и вообще саму схему. К примеру, № полиса - разве не уникальное значение?
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735644
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BeltarПри этом у меня вопросы относительно того, как себя поведет тот же TStringList на 15 млн строк тоже есть.
Зачем стринглист? Это лишняя прослойка. Обычный WriteLn (без открытия-закрытия на каждую строку, конечно) и всё. Ну или FileStream, если хочется более модного. Такие объемы хранить стоит только в крайнем случае, обычно их гоняют поточно
авторПоэтому и говорю, что лучше сначала создать в самой базе одну таблицу, которую можно экспортировать элементарным перебором.
Именно. Либо целиком, либо по кускам, если памяти не хватает.
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735654
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего быстрее WriteLn нет и не будет.
...
Рейтинг: 0 / 0
Выгрузка из базы
    #39735657
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у StringList'а в кишках не тот же FileStream, или TextFile с WriteLn?

Хотя действительно, зачем куда-то еще копировать в промежутке, когда можно сразу записывать.
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Выгрузка из базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]