Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Visual C++] Идексация записей в БД.


Автор: Gelos 11.5.2007, 17:26
Суть вопроса. Есть база данных, я разбил всю её на необходимые записи. Теперь мне нужно эти записи проидексировать, чтобы я мог по номеру записи тут же выводить её на экран. Записей много. больше 30000. Пока в голове мысль сделать массив массивов, чтобы по индексу одного обращаться к массивам, в которые занесены эти записи. 
но стоит проблема, как динамически сделать 30000 масивов. Есть ли другой способ индексации. Записи в БД не имеют никаких идендификаторов, которые можно было бы привязать к нумерации от 0 и так далее. smile 

P.S Извиняюсь за пропуск поля отвечающего за язык. Больше не повториться. 
P.S.P.S VC++ 

Автор: Gelos 12.5.2007, 19:36
keenara, 
дабы потом просто искать это поле в записях и по нему выводить? Тогда, можно так и не извращацца. Считаем, что записи нумеруются, с первой и по последнюю. В цикле перебираем ех и находим ту , которую укажем. Минусы - каждый раз перебор всех записей. А я хотел, чтобы они хранились все в памяти, тогда скорость обращения будет максимальной.

Автор: zkv 12.5.2007, 20:46
Цитата(Gelos @  11.5.2007,  17:26 Найти цитируемый пост)
Есть база данных

что вы под этим подразумеваете?

на случай, если вы сами плохо представляете, что хотите получить, посмотрите в сторону std::map, std::hash_map, std::set, std::hash_set возможно вам нужно что то из этого набора smile

Автор: zkv 12.5.2007, 22:33
Цитата(keenara @  12.5.2007,  20:53 Найти цитируемый пост)
А я например за 30 метров оперативы удавлюсь

ну например одна большая BMP-шка может столько занять  smile 
Замечали, сколько, к примеру, кушает Photoshop? И ничего, не давится.  smile
Это я к тому, что надо исходить из конкретных требований к программе, ну почему бы и не взять себе каких то 30 метров для достижения требуемого быстродействия, если никто не накладывает ограничения? 
Исходить надо из того насколько эта самая производительность увеличится, и какой ценой, и нужна ли вообще ее увеличивать.

Автор: Gelos 12.5.2007, 23:27
keenara, 
C точки зрения загрузки памяти. Признаю, учитывая слабость компов, большей их части, загрузка ~24-35 метров в память, не есть хорошо. Сортировать записи мне в данном случае самому не довзволено. 
Нужно использовать тот порядок , в котором они уже идут. ИМХО, добаление полей, в которые будет писаться индексы, или что то на подобие, это будет уже накрутка лишнего. Пришли к тому что имеем в начале.  в записях нет идендификаторов. просто есть куча записей, и я их могу читать одну за другой.

Что то я пока более простого подхода для данного случая, как просто находить нужную по счету запись с конца и выводить её, не вижу.  Медленно,  конечно, каждый раз перебирать всю базу. Но держать в памяти 30 мб мне вдруг стало жалко... smile 

Автор: zkv 12.5.2007, 23:31
keenara, вообщем это все риторика, я только хотел сказать, что не зная задачи ничего нельзя сказать о том сколько оперативки ей можно дать. 

Например данные представляют из себя результаты некоторых экспериментов, по которым прога должна построить некоторую модель, причем вычисления довольно ресурсоемкие, и каждый шаг вычислений требует одновременного участия сразу многих данных. 
И представь, что все эти вычисления занимают несколько часов (да что там часов - дней smile ).  
Думаю при запуске такой проги, на компьютер даже дышать будут бояться, не то чтобы за ним еще и работать.
Как считаешь, скажут тебе в таком случае спасибо, даже за значительную экономию оперативки, за счет даже небольшого снижения производительности?

Вообщем, не зная задачи говорить не о чем. 

Автор: dizzy1984 14.5.2007, 06:11
Цитата(Gelos @  11.5.2007,  17:26 Найти цитируемый пост)
Теперь мне нужно эти записи проидексировать

На сколько я знаю, в любой базе данных записи хранятся в индексированном виде.
Какой СУБД вы пользуетесь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)