C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
БД или многомерные массивы?, Проблема выбор и общий вопрос реализации
Велес
Отправлено: 18.11.2003, 14:03


Ученик-кочегар

Группа: Участник
Сообщений: 18



Добрый день.

Крайне нуждаюсь в совете по сложившейся ситуации.

Задача:

Приложение предназначено для проведения химических расчётов. Существует несколько переменных, значения которых в принципе представляют собой двумерный массив размерностью примерно [100][1000000] (последняя цифра может быть либо чуть меньше либо чуть больше). При этом, таких массивов несколько, порядка 5. И мало того, значения в данных массивах могут меняться при варьировании исходных данных. В принципе как раз возможность проведения подобного варьирования и является главной задачей программы. Значения из этих массивов дальше поступают на дальнейший расчёт.

Вопрос:

Какими средствами можно данную проблему? Как я понимаю, попытки создать просто такой массив средствами Билдера не получится, поскольку даже при попытке объявить массив [100][100000] уже компилятор начал ругатца и обзывать меня не хорошими словами. Я в принципе его понимаю. Будет ли лекарством от этого использование БД?

Заранее благодарен.
Admin
Отправлено: 18.11.2003, 14:34


Владимир

Группа: Администратор
Сообщений: 1190



Насколько будет заполнен данными такой массив ?
Если сильно — то не знаю что посоветовать, если немного, то:

Для этого есть такое понятие — разреженные массивы.
Советую обратиться к книге
"Теория и практика C++" для профессионалов Герберт Шилдт
(Изд. "BHV") из раздела "Литература"

QUOTE
Шифрование и сжатие данных, стандартные классы строк,
разбор математических выражений разреженные массивы,
шаблоны и их функции, методы параметризации, классы алгоритмов
сортировки


Также можете попробовать через vector

---

И возможно, создавать надо не массив,
а таблицы master-detail в базе данных,
и работать не через массив, а через
таблицы и ( компоненты работы с базами данных )

(как вы и написали -
"Будет ли лекарством от этого использование БД?")

Скорее всего будет, вот только скорость работы с
базой данных такого размера может быть весьма медленной.


Отредактировано Admin — 18/11/2003, 15:40
Георгий
Отправлено: 20.11.2003, 10:00


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



массивы 100*100 000 чисел типа double будут занимать ~80MB каждый т.е. 5*80=400MB. ОЗУ на машинах в институтах (как я понимаю этот рассчёт что-то вроде курсового?) редко достигает 128MB, по этому MS Windows будет большую часть времени работать с hdd (с файлом подкачки), а не с ОЗУ.

Если решение задачи удастся оформить как SQL запросы, то при использовании приличной СУБД (SQL Server, Oracle) с хорошим оптимизатором запросов задача будет решаться, по моему мнению, быстрее, чем в случае с массивами и подкачкой. Но в том случае, если удастся разобраться со структурой данных (определить какие операции будут выполнятся над ними и с какой частотой, диапазон изменения данных и т.п.) и в результате вписаться целиком в ОЗУ, то работа без СУБД будет значительно быстрее.

От себя могу порекомендовать книгу Бентли Дж. Жемчужны программирования. 2-е издание СПб.: Питер, 2002 в ней как раз есть много примеров из реальной жизни, как большие и медленные программы превращались в маленькие и быстрые

О массивах: такие большие надо создавать динамически
Велес
Отправлено: 21.11.2003, 12:30


Ученик-кочегар

Группа: Участник
Сообщений: 18



Спасибо за ответы. Буду пробовать разные варианты.

2 Георгий: нет, это не курсовая — это кандидатская работа.

Вернуться в Работа с базами данных в C++Builder