|
|
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Вопрос прост и явно не раз где-нибудь обсуждался, но быстро решение гуглением не нашел. Как работать с массивом около 10 миллиардов (1е10) значений типа реал (да - все десять миллиардов разные числа формата 9.12345е26, готов на любой другой тип способный съесть подобный формат чисел). Массив задан записью: рекорд[1..3] of рекорд[1..20] of рекорд[1..60] of рекорд[1..60] of рекорд[1..163] of рекорд[1..312] с кучей побочных параметров на каждом уровне. Если сразу задать массив размером больше миллиарда - too large: exceeds 2 GB, подозреваю, что если динамически - просто вылетит на определенном этапе заполнения. Можно конечно и отказаться от данного формата работы сразу со всем объемом данных, но так неохота... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 10:02 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
набить компьютер терабайтом памяти и использовать компилятор под x64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 10:15 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
или виртуализировать массив на диске (возможно, RAM-диске). Но придётся писать код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 10:16 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Использовать кэширование на диске, например. Заменить record на class с индексным свойсвом, и подгружать следующие уровни по необходимости, если логика приложения это позволяет. А если необходимо чтобы всё сразу было доступно, то да - охренелиард оперативки и x64 компилятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 10:20 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Bujhtdbx, Сделать из массива БД и отдать на откуп любимому SQL серверу - не предлагать? Что с этими данными-то делать нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 10:47 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей BujhtdbxКак работать А что подразумевается под "работать"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 10:49 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
982183Андрей BujhtdbxКак работать А что подразумевается под "работать"? хотя бы нулями заполнить )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 10:49 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Bujhtdbx, 1) как заполняется массив? 2) где хранятся данные для массива? 3) почему нельзя использовать СУБД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 10:52 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
defecatorили виртуализировать массив на диске (возможно, RAM-диске). Но придётся писать код alekcvpИспользовать кэширование на диске, например. Делаем по образу файла подкачки Windows: создаём типированный файл (f: file of tMegaRecord), небольшой массив для кеширования (buf: array of tMegaRecord) и работаем, пока на диске есть место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 11:01 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
DarkMasterАндрей Bujhtdbx, Сделать из массива БД и отдать на откуп любимому SQL серверу - не предлагать? Что с этими данными-то делать нужно? Предлагать можно, но я такое не умею :(. Может как-нибудь позже. Программа пишется для себя, сам ни разу не программист. 982183Андрей BujhtdbxКак работать А что подразумевается под "работать"? В зависимости от пожеланий пользователя (то биш меня) сохранять разные относительно небольшие части этих огромных массивов в другие файлы. Выводить в виде множество разных графиков (от времени, высоты, перегрузок, прочего), в идеале выводить значения полей для сечений (это файлы полей для определенной геометрии). Объяснять подробно долго, и врят ли вам интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 11:15 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
GerasimenkoАндрей Bujhtdbx, 1) как заполняется массив? 2) где хранятся данные для массива? 3) почему нельзя использовать СУБД? 1. Посредством считывания двух десятков текстовых файлов по 1-2 гб каждый. 2. Если вы про исходники - как уже написал, в виде текстовых файлов, в программе пока нигде. 3. Потому, что не умею :). Долго разбираться? Freedoomdefecatorили виртуализировать массив на диске (возможно, RAM-диске). Но придётся писать код alekcvpИспользовать кэширование на диске, например. Делаем по образу файла подкачки Windows: создаём типированный файл (f: file of tMegaRecord), небольшой массив для кеширования (buf: array of tMegaRecord) и работаем, пока на диске есть место. О, первый ответ, который можно попробовать реализовать с моими знаниями. Попробую разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 11:19 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей BujhtdbxDarkMasterАндрей Bujhtdbx, Сделать из массива БД и отдать на откуп любимому SQL серверу - не предлагать? Что с этими данными-то делать нужно? Предлагать можно, но я такое не умею :(. Может как-нибудь позже. Программа пишется для себя, сам ни разу не программист. С такими данными, рано или поздно вам придется использовать СУБД. Лучше начните сейчас, сначала будет немного в гору, потом сильно полегчает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 11:46 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей BujhtdbxDarkMasterАндрей Bujhtdbx, Сделать из массива БД и отдать на откуп любимому SQL серверу - не предлагать? Что с этими данными-то делать нужно? Предлагать можно, но я такое не умею :(. Может как-нибудь позже. Программа пишется для себя, сам ни разу не программист. 982183пропущено... А что подразумевается под "работать"? В зависимости от пожеланий пользователя (то биш меня) сохранять разные относительно небольшие части этих огромных массивов в другие файлы. Выводить в виде множество разных графиков (от времени, высоты, перегрузок, прочего), в идеале выводить значения полей для сечений (это файлы полей для определенной геометрии). Объяснять подробно долго, и врят ли вам интересно. Ну как бы СУБД именно и заточены на перелопачивание миллионов таких чисел. А сделать выборку (кусочек) от всего набора по каким-то условиям - вообще просто. В общем советую начинать смотреть в сторону СУБД. Городить свой велосипед, основанный на файлах - можно, но более трудоемко. Подумайте - в будущем вам понадобится поиск или индексы - прямая дорога к СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 11:55 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
S.G.С такими данными, рано или поздно вам придется использовать СУБД. Для таких блобов (~75GB) СУБД нафиг не нужна. Только руками, только хардкор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 12:25 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
В составе TurboPower SysUtils есть готовый класс для реализации виртуальных двумерных массивов. Файл StVArr.pas Там можно создавать массивы любого размера, сколько хватит места на диске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 12:33 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
DarkMaster ...Городить свой велосипед, основанный на файлах - можно, но более трудоемко. Подумайте - в будущем вам понадобится поиск или индексы - прямая дорога к СУБД. Общий объём данных (double x 10e10) составит около 75Gb. Сколько времени займёт создание БД с таким объёмом и не будет ли ограничений по количеству записей? Чтение и запись файла на диск ограничивается только производительностью HDD. Работа с файлами ничего сложного и трудоёмкого не представляет (write или blockwrite). Если копнуть чуть глубже, то все СУБД, в конечном итоге, сводятся на работу с файлами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 12:36 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
982183Андрей BujhtdbxКак работать А что подразумевается под "работать"? Лопатой ворочать. Пока все 10е10 не проворочаешь, на обед не пойдешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 12:39 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
FreedoomDarkMaster ...Городить свой велосипед, основанный на файлах - можно, но более трудоемко. Подумайте - в будущем вам понадобится поиск или индексы - прямая дорога к СУБД. Общий объём данных (double x 10e10) составит около 75Gb. Сколько времени займёт создание БД с таким объёмом и не будет ли ограничений по количеству записей? Чтение и запись файла на диск ограничивается только производительностью HDD. можно положить на SSD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 12:40 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
FreedoomЕсли копнуть чуть глубже, то все СУБД, в конечном итоге, сводятся на работу с файлами Если копнуть еще глубже, то не только СУБД, а почти все программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 12:40 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Найти сервер с не менее чем 82 Гб ОЗУ. Компилятор строго x64. Данные размещать не в стеке (его не хватит: в x32 16 МБ максимум, в x64 не знаю), а в куче (класс с вашим массивом создайте). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 13:11 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Эх, видимо придется разбираться, я уже о способах обработки данных думал :(, а пока даже массив загнать в программу не могу. Можно, конечно, задав исходные условия поочередно подгружать и обрабатывать файлы, но тогда каждый запрос будет как минимум ограничиваться временем чтения 40гб текстовых файлов. Ладно, либо разберусь с кешем или базами :), либо просто реализую частичную загрузку, сначала выбираю часть данных, с которыми хочу работать, работаю с ними. Если хочу другу часть - выгружаю старую, подгружаю новую. А ведь это даже не самые большие файлы полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 13:16 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей BujhtdbxЭх, видимо придется разбираться, я уже о способах обработки данных думал :(, а пока даже массив загнать в программу не могу. Можно, конечно, задав исходные условия поочередно подгружать и обрабатывать файлы, но тогда каждый запрос будет как минимум ограничиваться временем чтения 40гб текстовых файлов. Ладно, либо разберусь с кешем или базами :), либо просто реализую частичную загрузку, сначала выбираю часть данных, с которыми хочу работать, работаю с ними. Если хочу другу часть - выгружаю старую, подгружаю новую. А ведь это даже не самые большие файлы полей. а может быть, стоит задуматься о структурах данных более тщательно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 14:05 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
01.11.2017 14:05, defecator пишет: > а может быть, стоит задуматься о структурах данных более тщательно +100500! а ТС-у можно рекомендовать ознакомиться с книжкой Н.Вирта "Алгоритмы + структуры данных = программы" Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 14:12 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
defecator, +1. Очень даже возможно, что человеку не нужен этот гиганский массив. Либо наоборот - тут и петабайтных размеров мало будет. Мы не знаем, о какой предметной области идет речь, насколько ТС в ней компетентен,насколько адекватна выбранная модель отображения предметной области в компьютеризуемую задачу. Например, если знаешь, что такой-то параметр на заданном участке меняется линейно, вовсе нет надобности хранить значение этого параметра для каждого кванта времени. Я понимаю, что был задан конкретный вопрос, не связанный с предметной областью. Однако, учитывая большие объемы, важно принять правильное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 14:19 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
defecatorАндрей BujhtdbxЭх, видимо придется разбираться, я уже о способах обработки данных думал :(, а пока даже массив загнать в программу не могу. Можно, конечно, задав исходные условия поочередно подгружать и обрабатывать файлы, но тогда каждый запрос будет как минимум ограничиваться временем чтения 40гб текстовых файлов. Ладно, либо разберусь с кешем или базами :), либо просто реализую частичную загрузку, сначала выбираю часть данных, с которыми хочу работать, работаю с ними. Если хочу другу часть - выгружаю старую, подгружаю новую. А ведь это даже не самые большие файлы полей. а может быть, стоит задуматься о структурах данных более тщательно Эти данные я получаю уже в готовом виде, да и ничего особенного тут нет, обычные поля (нейтронные, температурные) в пространстве и времени, просто поля в геометрии задаются исходя из особенностей конструкции. При том сетка по высоте и времени далеко не плотная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 14:20 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39545844&tid=2041256]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
148ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 437ms |

| 0 / 0 |
