Подскажите, если у кого-нибудь возникала такая задача. Как можно наиболее удобно организовать работу с большим кол-вом объектов? Имеется в виду, что алгоритм обрабатывает данные и оперирует 1-2-3 Гб памяти.
Здравствуйте, lonli, Вы писали:
L>Подскажите, если у кого-нибудь возникала такая задача. Как можно наиболее удобно организовать работу с большим кол-вом объектов? Имеется в виду, что алгоритм обрабатывает данные и оперирует 1-2-3 Гб памяти.
Всё зависит от алгоритмов и самих данных. Можно ли буферизовать? Может ДБ прикрутить?
Здравствуйте, lonli, Вы писали:
L>Подскажите, если у кого-нибудь возникала такая задача. Как можно наиболее удобно организовать работу с большим кол-вом объектов? Имеется в виду, что алгоритм обрабатывает данные и оперирует 1-2-3 Гб памяти.
L>>Подскажите, если у кого-нибудь возникала такая задача. Как можно наиболее удобно организовать работу с большим кол-вом объектов? Имеется в виду, что алгоритм обрабатывает данные и оперирует 1-2-3 Гб памяти.
P>Поставить 2-3-4 Гб памяти!?? =)
Без понимания того какая платформа — не поможет. К примеру, в 32-битных версиях Windows в рамках одного процесса выделить 3 гб памяти (даже не одним куском а несколькими) — это возня с настройками системы (а больше не получится никак, хоть 128 гигабайт физической памяти поставь), не говоря уже о том в WinCE адресное пространство вообще ограничено 32 метрами.
Здравствуйте, lonli, Вы писали:
L>Подскажите, если у кого-нибудь возникала такая задача. Как можно наиболее удобно организовать работу с большим кол-вом объектов? Имеется в виду, что алгоритм обрабатывает данные и оперирует 1-2-3 Гб памяти.
Очень общий вопрос. С таким же успехом ты мог бы спросить "как удобно организовать работу со списком объектов, никто не сталкивался с такой задачей?".
Некоторые люди с такой задачей сталкивались. Результатом стала, например, сортировка слиянием (или семейство этих сортировок). Другие люди в результате такого столкновения создали реляционные базы данных. Ну и так далее...
Здравствуйте, lonli, Вы писали:
L>Подскажите, если у кого-нибудь возникала такая задача. Как можно наиболее удобно организовать работу с большим кол-вом объектов? Имеется в виду, что алгоритм обрабатывает данные и оперирует 1-2-3 Гб памяти.
Здравствуйте, mrozov, Вы писали:
M>Некоторые люди с такой задачей сталкивались. Результатом стала, например, сортировка слиянием (или семейство этих сортировок). Другие люди в результате такого столкновения создали реляционные базы данных. Ну и так далее...
Есть несколько алгоритмов, которые обрабатывают большие массивы данных (идет работа с миллионами объектов). Вот и хетлось уточнить, как это чаще всего происходит Сортировок нету, просто по опреджеленному алгоритму и на основании одних свойств объектов, выставляются свойства у других
L>Без понимания того какая платформа — не поможет. К примеру, в 32-битных версиях Windows в рамках одного процесса выделить 3 гб памяти (даже не одним куском а несколькими) — это возня с настройками системы (а больше не получится никак, хоть 128 гигабайт физической памяти поставь), не говоря уже о том в WinCE адресное пространство вообще ограничено 32 метрами.
Здравствуйте, lonli, Вы писали:
L>Здравствуйте, mrozov, Вы писали:
M>>Некоторые люди с такой задачей сталкивались. Результатом стала, например, сортировка слиянием (или семейство этих сортировок). Другие люди в результате такого столкновения создали реляционные базы данных. Ну и так далее...
L>Есть несколько алгоритмов, которые обрабатывают большие массивы данных (идет работа с миллионами объектов). Вот и хетлось уточнить, как это чаще всего происходит Сортировок нету, просто по опреджеленному алгоритму и на основании одних свойств объектов, выставляются свойства у других
Что за данные? Где хранятся, т.е. откуда берутся, куда вносятся изменения? Что за алгоритм, является ли он линейным или цикличным/рекурсивным? И т.п. Ничего не понятно. Тебе тут разные люди пишут, что такие проблемы чаще всего решаются с помощью баз даных. Опиши задачу нормально — может быть получишь пару грамотных советов. Иначе это все совершенно бесполезно.
Здравствуйте, mrozov, Вы писали:
M>Что за данные? Где хранятся, т.е. откуда берутся, куда вносятся изменения? Что за алгоритм, является ли он линейным или цикличным/рекурсивным? И т.п. Ничего не понятно. Тебе тут разные люди пишут, что такие проблемы чаще всего решаются с помощью баз даных. Опиши задачу нормально — может быть получишь пару грамотных советов. Иначе это все совершенно бесполезно.
Данные — аргументы и коллекции. Берутся — создаются в самом алгоритме (используются при расчетах). Алгоритм линейный.
Здравствуйте, lonli, Вы писали:
L>Данные — аргументы и коллекции. Берутся — создаются в самом алгоритме (используются при расчетах). Алгоритм линейный.
Хорошо. Значит смотри, как нужно решить твою проблему — в рамках своего линейного алгоритма создаешь объекты по одному, делаешь нужные расчеты, меняешь нужные поля и тут же уничтожаешь. Расход памяти — минимальный, проблем никаких.
В третий (и последний) раз тебе говорю — твой вопрос слишком общий.
Из общих соображений могу сказать только, что если нужно работать с общим кол-ом данных, превышающим объем памяти, то способа только два — файлы и базы данных. Если доступ к данным относительно линейный, то файлы. Если нет — СУБД.
Здравствуйте, Left2, Вы писали:
L>Без понимания того какая платформа — не поможет. К примеру, в 32-битных версиях Windows в рамках одного процесса выделить 3 гб памяти (даже не одним куском а несколькими) — это возня с настройками системы (а больше не получится никак, хоть 128 гигабайт физической памяти поставь)
Получится. Читай про AWE и PAE. Начни с MEM_PHYSICAL в VirtualAlloc и далее по ссылкам. Причем память будет несвопируемая.
Здравствуйте, lonli, Вы писали:
L>Подскажите, если у кого-нибудь возникала такая задача. Как можно наиболее удобно организовать работу с большим кол-вом объектов? Имеется в виду, что алгоритм обрабатывает данные и оперирует 1-2-3 Гб памяти.
Основной принцип работы: обрабатывать данные мелкими порциями, которые помещаются в память. Т.е. нужно преобразовать алгоритм работы так, что бы он долгое время крутил одну и ту же порцию данных, затем её выгружал, крутил другую порцию данных и т.д. Т.е. повысить локальность использования данных, минимизировать обращения к объектам, которые находятся вне ОЗУ
Если хорошо оптимизировать алгоритм по локальности использования данных (если его, конечно, возможно оптимизировать), то больше ничего и не надо.
Если нет — то тут дело кирдык вообще может оказаться.