powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с очень большими масивами
15 сообщений из 315, страница 13 из 13
Как работать с очень большими масивами
    #39598582
AriochчччДЧуть-чуть умеющий кодить прикладник с большой вероятностью создаст адекватную прикладную систему.

.....пока система маленькая и не упирается в возможности железа.

А когда надо начинать наворачивать кэши с разными срезами - это уже когда все, тупой метод "в лоб" перестал работать. И дальше.... как повезет.
Начинается увеличение сложности, это влечет за собой свои и чужие ошибки, которые нужно вовремя опознать, потом найти, потом исправить....

Но "первое блюдце" он найдёт и вылакает без вопросов, спорить глупо.
"Пока котлеты не подгорали" у топикстартер было всё отлично.
А потом данные доросли до 2ГБ и началось.....
Ну ничего, будем потихоньку расти и развиваться :). Вообще моя работа больше связана с расчётом на уже созданных мощнейших программных комплексах. Я же просто подготавливаю и визуализирую по средствам своих программы исходные данные и результаты, хотя в будущем хочу и больше сам делать.

А вообще по факту львиная доля серьёзных расчетных программ с точки зрения программирования весьма примитивны, там вся сложность в методике и математике, ну и исходных данных, конечно.

чччДАндрей ИгоревичУ данного способа есть недостаток. Если мне надо пройтись по всему массиву данных (весьма популярный "запрос"), как бы "вдоль" массива (вдоль - по времени) - то придётся поочерёдно загружать - выгружать всё БД для каждого запроса, либо дробить БД на более мелкие элементы.

если будешь использовать типизированные файлы - то размер блока может быть любым.
...
Можно данные массива хранить, "раскладывая" их по разным плоскостям. Данные будут храниться в избыточном (в разы) количестве, да, но зато ты сможешь пройтись "вдоль" массива также быстро, как и "поперек".
...
Я на всякий случай предложил: мало ли, вдруг твои алгоритмы предполагают длительную работу в отдельных "срезах" массива, зная эту особенность, можно здОрово выиграть описанным выше способом.
Ну я так и хотел по сути сделать. Так что попробую.
AriochчччД,
типизированный файл скорее всего будет глючить при размерах >2ГБ
Ну значит будет много файлов по 2Гб :).
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598583
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochYuRockА "у себя" сделать "развернутый" запрос с этими параметрами - и получить запись.

??????Ну что ты как маленький. FOR SELECT и UPDATE на каждую запись с логированием всех полей, ты ж сам предлагал этот вариант. Но только для отладки, а на на постоянную основу.

Это я не ради продолжения спора ответил. Для ясности просто.
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598584
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch...пока система маленькая и не упирается в возможности железа.
А когда надо ...
Есть масса задач, которые имеют свойство просто решаться. Задача возникла - решилась - задачи нет. Весь цикл.
Не требуется накапливать историю, не требуется обслуживать распухающую базу.
Пример: запустил MSWord, написал письмо, вставил картинку - распечатал, отправил по почте, оригинал уничтожил.
И каждый используемый программный компонент в сто тысяч раз сложнее самой сложной системы, которая крутится на базе милых сердцу СУБД, и он точно не упирается в железо.
...
А когда "упрется в железо" - то и здесь "программист" ничем не поможет: он наверняка с таким не сталкивался, а если и сталкивался, то весь его опыт находится исключительно в области его конкретного случая.
И к моменту, когда "упрется", ТС сам кого хочешь в блюдце тыкать будет.
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598588
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич...Arioch...типизированный файл скорее всего будет глючить при размерах >2ГБ
Ну значит будет много файлов по 2Гб :).
Нормально там все.
Нужно просто использовать не паскалевские средства доступа ("вещь в себе"), а (например) TFileStream. Читай/пиши любой элемент с точностью до байта.
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598723
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревичпоинтересуюсь у друга, который как раз работает с программами для АЭС как там всё реализовано на эту темукак раз на днях читал что то ли запустили то ли собираются спутник набитый практически обычными мирскими флэхами на посмотреть как же оно там будет жить
Ariochвполне вероятно что этот запрос тоже буде тв твоём клиенте, так что все равно придется клиента обновлятьили вполне вероятно что в клиенте не будет так что клиента при смене запроса обновлять не придется
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598857
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

ээээ.... тут кто-нибудь спрашивал за версию Delphi или Лазаря ?
Потому что в Delphi 5 и TFileStream точно так же 32-битный
В Delphi XE2 он 64-битный. А где было переключение я не в курсе.

Вот из такого рода грабель, которые надо на автомате замечать и проверять, и во многом состоит опыт прикладного программиста

TFileStream всё таки очень абстрактная базовая вещь, над ней бы сделать типизированную обёртку на генериках например...
Кстати, тот самый CachedBuffers вполне возможно оно и есть.
Ну или хотя бы TBufferedFileStream

Кроме того, всё таки когда речь о доступе то вдоль то поперек к мега-массиву - я бы подумал о переходе на 64-битный Delphi и MMF. Сделал вид, что весь файл целиком загружен в память - и гуляй по нему как захочется, а система пусть подгружает по мере необходимости
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598858
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan,

микроспутник на "полетать пару недель, упасть и сгореть" вполне проживёт свой срок
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598864
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/

и т.д.
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598913
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 - в итоге фактически используется последний вариант, что еще надо для работы с большими файлами?
...
И совершенно непонятны твои усилия впарить новичку глючные поделия блаженного оптимизатора.
Разве что действительно хочешь убедить ТС в мысли, что без "профи" он не сможет справится. Непонятно только, для чего это тебе нужно.
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598919
чччДАндрей Игоревич...
И стоп в 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- битный теперь использую (там где не использую БД), а вариант с файлом на жестком диске подключаемом "как из оперативы" (забыл как это называется) мне ещё в начале этой темы предлагали, у меня не получилось :), и я пошел другими путями.
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598953
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревичвариант с файлом на жестком диске подключаемом "как из оперативы" (забыл как это называется) мне ещё в начале этой темы предлагали, у меня не получилось

Это называется MMF :-) 21174521



чччД, TStream не предназначен дял работы с типизированными файлами.
Ни TFileStream, ни TBufferedFileStream такой работы не предоставляют.

В результате ТСу придется в каждом вызове заниматься копипастом, переходя между логикой доступа к записям к логике доступа к байтам и обратно.
А где массовый копипаст - там и описки, которые довольно трудно заметить.
Особенно когда надо будет работать с разными файлами, в которых разные структуры и размеры записей, перепутать в запарке волшебную константу раз плюнуть.

Либо ТСу придётся делать свою обёртку для типизированного доступа поверх TStream.
И как минимум по началу она тоже будет "глючной поделкой".
А оптимизатор, хотя и фонтанирует блаженством, практики кодинга имеет поболее ТСа.
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39598973
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch...
чччД, TStream не предназначен дял работы с типизированными файлами.
Ни TFileStream, ни TBufferedFileStream такой работы не предоставляют.

В результате ТСу придется в каждом вызове заниматься копипастом...
...
И как минимум по началу она тоже будет "глючной поделкой".
...
А оптимизатор, хотя и фонтанирует блаженством, практики кодинга имеет поболее ТСа.
...

Непонятно, что ты хочешь доказать.
PS: кстати, пузыри пошли.
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39599066
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Что у других библиотек, типа CachedBuffers, вполне могут быть практические преимущества перед TStream

TStream это типа как модно-современно, да ещё и искаропки, но слишком абстрактно и типизированные файлы заменяет плохо.

А потому пока ТС в активном поиске, ему лучше сразу проверить несколько вариантов организации чтения/записи файлов, чем завязаться на сырой (raw) TStream и потом иметь маленькие, но постоянные проблемы с копипастом

Ergo чччДтвои усилия впарить здесь совсем не каждую фигню от SOFT-FOR-что-то-там, а впарить поиск (или самостоятельное написание, раз уж программист - это не профессия) более подходящих для его данных библиотек, чем "TStream патамушто TStream"
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39599132
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch...TStream это типа как модно-современно...
"Вопросов больше не имею" - (с).
...
Рейтинг: 0 / 0
Как работать с очень большими масивами
    #39599196
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch.. много слов про якобыминусы БДтут вообще-то начали с того, что все данные в массивах у ТС просто не помещаются в памяти.
и вместо того, чтобы городить свою мини-субд (а этим обязательно все кончится, так как аппетит приходит во время еды), ему (совершенно правильно), посоветовали взять уже готовое.

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


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