| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Visual C++] Идексация записей в БД. |
| Автор: Gelos 11.5.2007, 17:26 |
| Суть вопроса. Есть база данных, я разбил всю её на необходимые записи. Теперь мне нужно эти записи проидексировать, чтобы я мог по номеру записи тут же выводить её на экран. Записей много. больше 30000. Пока в голове мысль сделать массив массивов, чтобы по индексу одного обращаться к массивам, в которые занесены эти записи. но стоит проблема, как динамически сделать 30000 масивов. Есть ли другой способ индексации. Записи в БД не имеют никаких идендификаторов, которые можно было бы привязать к нумерации от 0 и так далее. P.S Извиняюсь за пропуск поля отвечающего за язык. Больше не повториться. P.S.P.S VC++ |
| Автор: Gelos 12.5.2007, 19:36 |
| keenara, дабы потом просто искать это поле в записях и по нему выводить? Тогда, можно так и не извращацца. Считаем, что записи нумеруются, с первой и по последнюю. В цикле перебираем ех и находим ту , которую укажем. Минусы - каждый раз перебор всех записей. А я хотел, чтобы они хранились все в памяти, тогда скорость обращения будет максимальной. |
| Автор: zkv 12.5.2007, 20:46 |
что вы под этим подразумеваете? на случай, если вы сами плохо представляете, что хотите получить, посмотрите в сторону std::map, std::hash_map, std::set, std::hash_set возможно вам нужно что то из этого набора |
| Автор: zkv 12.5.2007, 22:33 |
ну например одна большая BMP-шка может столько занять Замечали, сколько, к примеру, кушает Photoshop? И ничего, не давится. Это я к тому, что надо исходить из конкретных требований к программе, ну почему бы и не взять себе каких то 30 метров для достижения требуемого быстродействия, если никто не накладывает ограничения? Исходить надо из того насколько эта самая производительность увеличится, и какой ценой, и нужна ли вообще ее увеличивать. |
| Автор: Gelos 12.5.2007, 23:27 |
| keenara, C точки зрения загрузки памяти. Признаю, учитывая слабость компов, большей их части, загрузка ~24-35 метров в память, не есть хорошо. Сортировать записи мне в данном случае самому не довзволено. Нужно использовать тот порядок , в котором они уже идут. ИМХО, добаление полей, в которые будет писаться индексы, или что то на подобие, это будет уже накрутка лишнего. Пришли к тому что имеем в начале. в записях нет идендификаторов. просто есть куча записей, и я их могу читать одну за другой. Что то я пока более простого подхода для данного случая, как просто находить нужную по счету запись с конца и выводить её, не вижу. Медленно, конечно, каждый раз перебирать всю базу. Но держать в памяти 30 мб мне вдруг стало жалко... |
| Автор: zkv 12.5.2007, 23:31 |
| keenara, вообщем это все риторика, я только хотел сказать, что не зная задачи ничего нельзя сказать о том сколько оперативки ей можно дать. Например данные представляют из себя результаты некоторых экспериментов, по которым прога должна построить некоторую модель, причем вычисления довольно ресурсоемкие, и каждый шаг вычислений требует одновременного участия сразу многих данных. И представь, что все эти вычисления занимают несколько часов (да что там часов - дней Думаю при запуске такой проги, на компьютер даже дышать будут бояться, не то чтобы за ним еще и работать. Как считаешь, скажут тебе в таком случае спасибо, даже за значительную экономию оперативки, за счет даже небольшого снижения производительности? Вообщем, не зная задачи говорить не о чем. |
| Автор: dizzy1984 14.5.2007, 06:11 |
На сколько я знаю, в любой базе данных записи хранятся в индексированном виде. Какой СУБД вы пользуетесь? |