|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Всем доброго дня, возникла задача импорта больших текстовых файлов с последующим разбором их содержимого по другим таблицам. Поскольку при импорте информация берётся из разных частей файлов и т.к. файлы очень большие возникла идея сначала зачитывать их во временные таблицы а потом уже разбирать и импортировать в целевые таблицы (разбирать их в памяти 32битного приложения просто нехватит памяти в 2 Гб). Поскольку после импорта эти данные не нужны хотелось бы эти временные таблицы потом удалять так что бы не оставлять в базе мусор. Соотв. начал искать информацию по использованию временных таблиц в FB 2.5.9 и в перспективе в 3й версии. Нашел что согласно документации при создании временных таблиц (мне по видимому нужно уровня соединения) надо использовать "GLOBAL TEMPORARY" и "COMMIT PRESERVE ROWS". Далее возник вопрос - после того как таблица автоматически удаляется остаётся ли мусор в базе и до какого момента этот мусор будет существовать? Например будет ли он удаляться только при восстановлении из резервной копии или его можно собрать другим способом. Хотелось бы ещё услышать что то о подводных камнях которые могут ждать при использовании временных таблиц с большим объёмом данных, на что стоит обратить внимание и где "подстелить соломки". Где можно подробнее почитать о теме временных таблиц кроме документации (её сейчас активно штудирую на эту тему но информаци в ней не так много). Спасибо за любые советы и информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:15 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Неужели так сложно открыть документацию? http://www.ibase.ru/files/firebird/Firebird_3_0_Language_Reference_RUS.pdf стр 126 Глобальные временные таблицы (в дальнейшем сокращённо GTT) так же, как и обычные таблицы, являются постоянными метаданными, но данные в них ограничены по времени существования транзакцией (значение по умолчанию) или соединением с БД. Каждая транзакция или соединение имеет свой собственный экземпляр GTT с данными, изолированный от всех остальных. Экземпляры создаются только при условии обращения к GTT, и данные в ней удаляются при завершении транзакции или отключении от БД. Метаданные GTT могут быть изменены или удалены с помощью инструкций ALTER TABLE и DROP TABLE. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:41 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
что за формат файлов такой, что их непременно надо целиком в память грузить ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:41 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Дегтярев Евгений, Datanorm ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:45 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
А подводный камень будет такой - временные таблицы будут скидыватся на диск в %FIREBIRD_TMP% , если эта переменная не переопеределена по умолчанию, то в Windows возможна нехватка места на системном диске и последующие проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:47 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotunДалее возник вопрос - после того как таблица автоматически удаляется остаётся ли мусор в базе и до какого момента этот мусор будет существовать? Таблица никуда не удаляется. Удаляются только данные. Поскольку GTT размещены во временных файлах, то в БД мусора никакого нет. Но версии могут существовать в этих временных файлах. Собственно можно наткнуться даже на сборку мусора в рамках своего же коннекта. Я бы вообще на этот счёт не заморачивался. Кривая работа с GTT никому не может повредить, кроме самого соединения в котором эта работа происходит. Про резервные копии вообще билеберда какая-то. Содержимое временных таблиц в них никогда не попадёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:48 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun Где можно подробнее почитать о теме временных таблиц кроме документации (её сейчас активно штудирую на эту тему но информации в ней не так много ). не верю ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:50 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Gallemar, если что в 4.0 для их размещения отдельный параметр сделали в конфиге. hlopotunСоотв. начал искать информацию по использованию временных таблиц в FB 2.5.9 и в перспективе в 3й версии. в перспективе надо уже на 4.0 смотреть, в вот какой смысл делать миграцию на предыдущую версию, когда уже есть новая с кучей дополнительных возможностей. Боишься на свежие баги наткнуться, ну так подожди 4.0.1, всё равно мигрировать ты долго будешь, раз до сих пор даже на 3.0 не смог перейти ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:55 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun Дегтярев Евгений, Datanorm примеров не нашел, эт какой-то местечковый формат? в гугле ссылки только на немецком написано что это текстовый формат закажи если не секрет что за зверь ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:57 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Симонов Денис если что в 4.0 для их размещения отдельный параметр сделали в конфиге. Спасибо за информацию ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 10:57 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Симонов Денис Gallemar, если что в 4.0 для их размещения отдельный параметр сделали в конфиге. да погоди, похоже, автор хочет странного 64bit по какой-то причине не использует, на 32bit распарсить почему то не может и движет в направлении проктостоматологии ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 11:00 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Дегтярев Евгений Симонов Денис Gallemar, если что в 4.0 для их размещения отдельный параметр сделали в конфиге. да погоди, похоже, автор хочет странного 64bit по какой-то причине не использует Ну бывает, нет у него возможности собрать ПО х32, это не странность, до сих пор куча софта на Delphi 7 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 11:02 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Дегтярев Евгений hlopotun Дегтярев Евгений, Datanorm примеров не нашел, эт какой-то местечковый формат? в гугле ссылки только на немецком написано что это текстовый формат закажи если не секрет что за зверь формат заточенный на обмена товарными артиклями, их группами, ценами на них и скидками. Целиком зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно позиционироваться в разные части файла). Предведущая версия софта что это делает (написанная ещё в 2005м) наткнулась на проблемы с памятью при импорте больших файлов в этом году. Начиная примерно от 10 млн строк софт вываливается примерно на 80% зачитывания данных с "Out of memory". Можно конечно вынести импорт в отдельное приложение и скомпилироватрь его как x64, но гарантии что файлы не будут расти дальше нет. Опять же, в приложении задействовано куча модулей используемых в основной 32х битной программе и все их вычленить и тоже перекомпилить под х64 проблематично. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 11:12 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun формат заточенный на обмена товарными артиклями, их группами, ценами на них и скидками. Выглядит то он как? И если хочется вывести импорт в отдельное приложение, то лучше и БД отдельную сделать. А потом в основную передавать уже обработанные данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 11:22 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun Целиком зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно позиционироваться в разные части файла). А можно такой обмен данными выкинуть и написать нормальный, без обработки млн строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 11:25 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun разбирать их в памяти 32битного приложения просто нехватит памяти в 2 Гб В MS Windows есть MMF. Так вот, при формировании "окна" для работы с файлам , указывается 64-битное смещение от начала файла и 32-битный размер. То есть, используя MMF, можно обрабатывать файлы любого размера. ("64 бит должно быть достаточно для каждого" )/ ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:23 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
ъъъъъ hlopotun разбирать их в памяти 32битного приложения просто нехватит памяти в 2 Гб тут программист нужен. © ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:27 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Gallemar hlopotun Целиком зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно позиционироваться в разные части файла). А можно такой обмен данными выкинуть и написать нормальный, без обработки млн строк? не получится, не от нас зависит. Стандарт принят за основу кучей поставщиков и только в нём они присылают данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:28 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun и только в нём они присылают данные. и каждый раз по млн строк файлы? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:29 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
ъъъъъ hlopotun разбирать их в памяти 32битного приложения просто нехватит памяти в 2 Гб В MS Windows есть MMF. Так вот, при формировании "окна" для работы с файлам , указывается 64-битное смещение от начала файла и 32-битный размер. То есть, используя MMF, можно обрабатывать файлы любого размера. ("64 бит должно быть достаточно для каждого" )/ примерно так предведущий коллега и пробовал поступить. Использовал допиленный TbufferedFileStream в сочетании с индексами в памяти в которых и хранилась нужная информация для позиционирования в этом файле в последствии. И как раз этот индекс и вызывал переполнение в последствии. Т.к. Файлов может импортироваться за раз несколько, причём надо между ними прыгать итп. Там достаточно замороченная логика где неудобство формата сталкивается с логикой самого приложания. В эту часть мне ещё надо вникать самому. Сейчас надо определиться с архитектурой пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:34 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun формат заточенный на обмена товарными артиклями, их группами, ценами на них и скидками. это мне гугльтраслейт с немецкого перевел ты формат покажи... пример текста, еще ли оно текстовое как пишуть в интернетах ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:35 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotunЦеликом зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно позиционироваться в разные части файла). Могли бы Вы привести пример такой "понятности что зачитывать"? И в чём проблемы с позиционированием в файле? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:36 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Gallemar hlopotun и только в нём они присылают данные. и каждый раз по млн строк файлы? с десятками миллионов строк. У крупных поставщиков огромное количество артиклей, которые тоже разбиваются на различные варианты одного и того же артикля (сочетание цвет, состав, итп). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:37 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun ъъъъъ пропущено... В MS Windows есть MMF. Так вот, при формировании "окна" для работы с файлам , указывается 64-битное смещение от начала файла и 32-битный размер. То есть, используя MMF, можно обрабатывать файлы любого размера. ("64 бит должно быть достаточно для каждого" )/ примерно так предведущий коллега и пробовал поступить. Использовал допиленный TbufferedFileStream в сочетании с индексами в памяти в которых и хранилась нужная информация для позиционирования в этом файле в последствии. И как раз этот индекс и вызывал переполнение в последствии. Т.к. Файлов может импортироваться за раз несколько, причём надо между ними прыгать итп. Там достаточно замороченная логика где неудобство формата сталкивается с логикой самого приложания. В эту часть мне ещё надо вникать самому. Сейчас надо определиться с архитектурой пока. Ну да, вместо того, чтобы разбираться в логике и править баги, куда приятнее заниматься якобы полезным делом: например, поговорить о том, как долго остается мусор в базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:39 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunЦеликом зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно позиционироваться в разные части файла). Могли бы Вы привести пример такой "понятности что зачитывать"? И в чём проблемы с позиционированием в файле? да, выше уже написал, что в память не лезет уже сам индекх позволяющий позиционироваться в этих файлах. тут накладываеся ещё софт в котором это всё запускается, который тоже хорошо кушает память. Хорошое решение было бы просто выделить импорт в отдельное x64 приложене но это практически невозможно. Слишком много связей с другими х32 модулями а у тех с третьими. Софту уже больше 25 лет, для интерфейса одних только самописных фреймворков внутри использовано более трёх. Короче проще переписать нежели выделить и в х64 перекомпилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:45 |
|
|
start [/forum/topic.php?fid=40&msg=40084039&tid=1559985]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 149ms |
0 / 0 |