|
|
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
AriochчччДЧуть-чуть умеющий кодить прикладник с большой вероятностью создаст адекватную прикладную систему. .....пока система маленькая и не упирается в возможности железа. А когда надо начинать наворачивать кэши с разными срезами - это уже когда все, тупой метод "в лоб" перестал работать. И дальше.... как повезет. Начинается увеличение сложности, это влечет за собой свои и чужие ошибки, которые нужно вовремя опознать, потом найти, потом исправить.... Но "первое блюдце" он найдёт и вылакает без вопросов, спорить глупо. "Пока котлеты не подгорали" у топикстартер было всё отлично. А потом данные доросли до 2ГБ и началось..... Ну ничего, будем потихоньку расти и развиваться :). Вообще моя работа больше связана с расчётом на уже созданных мощнейших программных комплексах. Я же просто подготавливаю и визуализирую по средствам своих программы исходные данные и результаты, хотя в будущем хочу и больше сам делать. А вообще по факту львиная доля серьёзных расчетных программ с точки зрения программирования весьма примитивны, там вся сложность в методике и математике, ну и исходных данных, конечно. чччДАндрей ИгоревичУ данного способа есть недостаток. Если мне надо пройтись по всему массиву данных (весьма популярный "запрос"), как бы "вдоль" массива (вдоль - по времени) - то придётся поочерёдно загружать - выгружать всё БД для каждого запроса, либо дробить БД на более мелкие элементы. если будешь использовать типизированные файлы - то размер блока может быть любым. ... Можно данные массива хранить, "раскладывая" их по разным плоскостям. Данные будут храниться в избыточном (в разы) количестве, да, но зато ты сможешь пройтись "вдоль" массива также быстро, как и "поперек". ... Я на всякий случай предложил: мало ли, вдруг твои алгоритмы предполагают длительную работу в отдельных "срезах" массива, зная эту особенность, можно здОрово выиграть описанным выше способом. Ну я так и хотел по сути сделать. Так что попробую. AriochчччД, типизированный файл скорее всего будет глючить при размерах >2ГБ Ну значит будет много файлов по 2Гб :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 20:59 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
AriochYuRockА "у себя" сделать "развернутый" запрос с этими параметрами - и получить запись. ??????Ну что ты как маленький. FOR SELECT и UPDATE на каждую запись с логированием всех полей, ты ж сам предлагал этот вариант. Но только для отладки, а на на постоянную основу. Это я не ради продолжения спора ответил. Для ясности просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 21:05 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Arioch...пока система маленькая и не упирается в возможности железа. А когда надо ... Есть масса задач, которые имеют свойство просто решаться. Задача возникла - решилась - задачи нет. Весь цикл. Не требуется накапливать историю, не требуется обслуживать распухающую базу. Пример: запустил MSWord, написал письмо, вставил картинку - распечатал, отправил по почте, оригинал уничтожил. И каждый используемый программный компонент в сто тысяч раз сложнее самой сложной системы, которая крутится на базе милых сердцу СУБД, и он точно не упирается в железо. ... А когда "упрется в железо" - то и здесь "программист" ничем не поможет: он наверняка с таким не сталкивался, а если и сталкивался, то весь его опыт находится исключительно в области его конкретного случая. И к моменту, когда "упрется", ТС сам кого хочешь в блюдце тыкать будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 21:17 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич...Arioch...типизированный файл скорее всего будет глючить при размерах >2ГБ Ну значит будет много файлов по 2Гб :). Нормально там все. Нужно просто использовать не паскалевские средства доступа ("вещь в себе"), а (например) TFileStream. Читай/пиши любой элемент с точностью до байта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 21:21 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревичпоинтересуюсь у друга, который как раз работает с программами для АЭС как там всё реализовано на эту темукак раз на днях читал что то ли запустили то ли собираются спутник набитый практически обычными мирскими флэхами на посмотреть как же оно там будет жить Ariochвполне вероятно что этот запрос тоже буде тв твоём клиенте, так что все равно придется клиента обновлятьили вполне вероятно что в клиенте не будет так что клиента при смене запроса обновлять не придется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 09:43 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччД, ээээ.... тут кто-нибудь спрашивал за версию Delphi или Лазаря ? Потому что в Delphi 5 и TFileStream точно так же 32-битный В Delphi XE2 он 64-битный. А где было переключение я не в курсе. Вот из такого рода грабель, которые надо на автомате замечать и проверять, и во многом состоит опыт прикладного программиста TFileStream всё таки очень абстрактная базовая вещь, над ней бы сделать типизированную обёртку на генериках например... Кстати, тот самый CachedBuffers вполне возможно оно и есть. Ну или хотя бы TBufferedFileStream Кроме того, всё таки когда речь о доступе то вдоль то поперек к мега-массиву - я бы подумал о переходе на 64-битный Delphi и MMF. Сделал вид, что весь файл целиком загружен в память - и гуляй по нему как захочется, а система пусть подгружает по мере необходимости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 12:18 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
vavan, микроспутник на "полетать пару недель, упасть и сгореть" вполне проживёт свой срок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 12:18 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичЕсть ли какие-либо преимущества у БД для подобного вида операций? В принципе есть, но у ДРУГИХ баз данных, их даже часто называют не базами, а хранилищами. Firebird - чётко выраженный сервер для OLTP - https://ru.wikipedia.org/wiki/OLTP Если же вы хотите визуализировать большие объёмы редко изменяемых данных, то ваша область - OLAP. https://ru.wikipedia.org/wiki/OLAP Ну и дальше по гуглю для этой аббревиатуры https://ru.wikipedia.org/wiki/OLAP-куб http://www.olap.ru/basic/alpero2i.asp https://habrahabr.ru/post/126810/ и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 12:25 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
AriochчччД, ээээ.... тут кто-нибудь спрашивал за версию Delphi или Лазаря ? Потому что в Delphi 5 и TFileStream точно так же 32-битный В Delphi XE2 он 64-битный. А где было переключение я не в курсе. Вот из такого рода грабель, которые надо на автомате замечать и проверять, и во многом состоит опыт прикладного программиста TFileStream всё таки очень абстрактная базовая вещь, над ней бы сделать типизированную обёртку на генериках например... Кстати, тот самый CachedBuffers вполне возможно оно и есть. Ну или хотя бы TBufferedFileStream Кроме того, всё таки когда речь о доступе то вдоль то поперек к мега-массиву - я бы подумал о переходе на 64-битный Delphi и MMF. Сделал вид, что весь файл целиком загружен в память - и гуляй по нему как захочется, а система пусть подгружает по мере необходимости Что ты все нагнетаешь на пустом месте. Прикладной программист - это тот, кто знает прикладную область, кто ее знает луче, чем ТС? А кодить и обезьяна сможет. Про версию Delphi он сам говорил, сперва он использовал D7, после - XE 10.1. Не знаю, что там в 10.1, но в D7 у TStream свойства Size и Position имеют тип Int64, метод CopyFrom принимает и возвращает In64, метод Seek перегружен, имеет два интерфейса -и с Integer , и с Int64 - в итоге фактически используется последний вариант, что еще надо для работы с большими файлами? ... И совершенно непонятны твои усилия впарить новичку глючные поделия блаженного оптимизатора. Разве что действительно хочешь убедить ТС в мысли, что без "профи" он не сможет справится. Непонятно только, для чего это тебе нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 13:11 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччДАндрей Игоревич... И стоп в 2 раз. А сколько можно столбцов в БД сделать? 350 можно? Никаких подводных камней не будет? Это, как мне кажется, очень так ускорит заполнение. Много можно. Видел табличку в 500 полей. Главное, чтобы данных там не более 64кБайт (реально - чуть поменьше) на одну запись набралось. В общем стало ещё медленней, но, возможно, из-за того, что отказался от строки в пользу Float (может операция преобразования строки в число в самой БД требует время). Ладно, пока от БД отойду, попробую через TFileStream. AriochАндрей ИгоревичЕсть ли какие-либо преимущества у БД для подобного вида операций? В принципе есть, но у ДРУГИХ баз данных, их даже часто называют не базами, а хранилищами. Firebird - чётко выраженный сервер для OLTP - https://ru.wikipedia.org/wiki/OLTP Если же вы хотите визуализировать большие объёмы редко изменяемых данных, то ваша область - OLAP. https://ru.wikipedia.org/wiki/OLAP Ну и дальше по гуглю для этой аббревиатуры https://ru.wikipedia.org/wiki/OLAP-куб http://www.olap.ru/basic/alpero2i.asp https://habrahabr.ru/post/126810/ и т.д. Ну некоторый ликбез произвел, но создалось впечатление, что для меня это избыточна, может позже поподробнее изучу. AriochКроме того, всё таки когда речь о доступе то вдоль то поперек к мега-массиву - я бы подумал о переходе на 64-битный Delphi и MMF. Сделал вид, что весь файл целиком загружен в память - и гуляй по нему как захочется, а система пусть подгружает по мере необходимости Ну я и так 64- битный теперь использую (там где не использую БД), а вариант с файлом на жестком диске подключаемом "как из оперативы" (забыл как это называется) мне ещё в начале этой темы предлагали, у меня не получилось :), и я пошел другими путями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 13:15 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревичвариант с файлом на жестком диске подключаемом "как из оперативы" (забыл как это называется) мне ещё в начале этой темы предлагали, у меня не получилось Это называется MMF :-) 21174521 чччД, TStream не предназначен дял работы с типизированными файлами. Ни TFileStream, ни TBufferedFileStream такой работы не предоставляют. В результате ТСу придется в каждом вызове заниматься копипастом, переходя между логикой доступа к записям к логике доступа к байтам и обратно. А где массовый копипаст - там и описки, которые довольно трудно заметить. Особенно когда надо будет работать с разными файлами, в которых разные структуры и размеры записей, перепутать в запарке волшебную константу раз плюнуть. Либо ТСу придётся делать свою обёртку для типизированного доступа поверх TStream. И как минимум по началу она тоже будет "глючной поделкой". А оптимизатор, хотя и фонтанирует блаженством, практики кодинга имеет поболее ТСа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 13:40 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Arioch... чччД, TStream не предназначен дял работы с типизированными файлами. Ни TFileStream, ни TBufferedFileStream такой работы не предоставляют. В результате ТСу придется в каждом вызове заниматься копипастом... ... И как минимум по началу она тоже будет "глючной поделкой". ... А оптимизатор, хотя и фонтанирует блаженством, практики кодинга имеет поболее ТСа. ... Непонятно, что ты хочешь доказать. PS: кстати, пузыри пошли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 13:53 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччД, Что у других библиотек, типа CachedBuffers, вполне могут быть практические преимущества перед TStream TStream это типа как модно-современно, да ещё и искаропки, но слишком абстрактно и типизированные файлы заменяет плохо. А потому пока ТС в активном поиске, ему лучше сразу проверить несколько вариантов организации чтения/записи файлов, чем завязаться на сырой (raw) TStream и потом иметь маленькие, но постоянные проблемы с копипастом Ergo чччДтвои усилия впарить здесь совсем не каждую фигню от SOFT-FOR-что-то-там, а впарить поиск (или самостоятельное написание, раз уж программист - это не профессия) более подходящих для его данных библиотек, чем "TStream патамушто TStream" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:01 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Arioch...TStream это типа как модно-современно... "Вопросов больше не имею" - (с). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:38 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Arioch.. много слов про якобыминусы БДтут вообще-то начали с того, что все данные в массивах у ТС просто не помещаются в памяти. и вместо того, чтобы городить свою мини-субд (а этим обязательно все кончится, так как аппетит приходит во время еды), ему (совершенно правильно), посоветовали взять уже готовое. что будет легко, - нет, не обещали. но делать свое - будет еще труднее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 16:12 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39598582&tid=2041256]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 489ms |

| 0 / 0 |
