| Автор |
Съобщение |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
 Големичка База данни
Едно въпросче. Как се пише база данни за 100000 студента. Трябва да използвам struct student { char name[40]; char vorname[20]; char fach[40]; int matrikelnummer; float noten[20]; student * pNext; }; Мислех да го правя с масив, ама няма да стане явно  тази структура изглежда да гълта по 182кБ на елемент. Умножено по 100000 - няма да стигне РАМ-а. Какво се прави в такива случаи? Не мога да използвам и данимачна памет или поне не се сещам как...
|
| Сря Май 04, 2005 11:35 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
[/quote]student * pNext; [quote] е той отговорът на въпроса ми бил в поста  . С поинтер ще става явно, сега чета за някакви навързани листи, които се използват именно в такива случаи. Абе то и с масив ще стане, ама ще трябва да поръчам повечко РАМ за РС-то, че няма да стигне 
|
| Сря Май 04, 2005 11:58 pm |
|
 |
|
forest_gump
Ранг: Професионалист
Регистриран на: Сря Окт 13, 2004 11:24 pm Мнения: 500 Местоположение: Стара Загора
|
Едно вероятно решение , правиш структура само на един от редовете в базата както си направил за студента , създаваш файл от типа на структората /знам за паскал че става/, създаваш промелива от типа на структурата и когато записваш в базата попълваш променливите в структурата и добавяш запис във файла със стандартният оп. writefile, при четене е същото само че обратно, при търсене вече е гърч ... ограничението е само във макс. размер на файла в зависимост от фат-таблицата на диска!
|
| Чет Май 05, 2005 12:00 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Звучи подходящо решение ще опитам. Благодаря
|
| Чет Май 05, 2005 12:21 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
А аз имам някакви спомени че веднъж направих една програмка дето правеще структура по голяма от 100Мб а Pcto na koeto работеше беше с 64Мб или нещо такова. Никакви мерки не бях вземал за работа с паметта. Visual studioto или чичко windows са се справяли явно с това.Така и не се замислих защо работи. Това беше преди 2 години и го правих с visual studio 6 na C++. Така че що не пробваш да си компилираш програмката така и да видиш какво ше стане. Аз така и тогава не успях да я тествам щото не успях да си подкарам хардуера и, но се компилираше и тръгваше и на тая машина с 64Мб рам.
|
| Чет Май 05, 2005 12:44 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
е точно това го нямам под ръка в момента, но ще пробвам как ще се компилира на gcc-то. Последния път като опитах да го гърча с aloc-a нещо не стана ама я да видим сега колко ми е стабилна системата. 
|
| Чет Май 05, 2005 12:47 am |
|
 |
|
forest_gump
Ранг: Професионалист
Регистриран на: Сря Окт 13, 2004 11:24 pm Мнения: 500 Местоположение: Стара Загора
|
Ако имаш Linux предвид , мисля че ще трябва да му кажеш че смяташ да се шириш из рама, пингвина много се мръщи на процеси различни от кърнела дето искат да си играят с паметта, не забравяй че линукса е преди виндовса по стаж в многозадачноста и protected mode-то на паметта!
|
| Чет Май 05, 2005 12:55 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: Големичка База данни
...
Последна промяна ¶ на Съб Яну 28, 2012 10:40 am, променена общо 1 път
|
| Чет Май 05, 2005 1:11 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
хм... пропуснал съм една 0, за втори път ми се случва тази седмица  . За курсова работа е, ама аз сам седнах да си тровя живота. Тя задачата съвсем не е сложна, искат само да видим дали сме разбрали как се работи с масиви и пойнтери, ама аз сам седнах да си тровя живота с тази база данни. Но нищо, интересно ми е, а и не вреди да поопитам туй онуй. Сега нацепих базата на 4 файла (по един за всеки параметър) не защото е някакво сложно решение за оптимизация, ами просто не се сещам как при четене да разпозная кои стойности на кои елемент от базата отговарят. Опааа сега ми хрумна (то хубаво нещо било форума, понякога ти идват идеи докато задаваш въпроси  ). Така, новият хак е да пиша само в един файл, а като завъртя цикъла да чета през 4 стойности, така ще знам, че на едно завъртане отговаря стойност на един елемнт. 
|
| Чет Май 05, 2005 1:38 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
...
Последна промяна ¶ на Съб Яну 28, 2012 10:41 am, променена общо 1 път
|
| Чет Май 05, 2005 2:16 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
pirev, закова ме. Това което си ми дал тръгна Аз тук се мъча да разбера защо не мога да отворя файла с ofstream file ("base") дава ми Не разбирам, включил съм fstream в начлото, опитах и с fstream.h, нали там трябва да ги има дефинирани тези функции. Ще се поровя още малко, ама вече е 2 часа посреднощ, а такива идиотски грешки да ми спъват работата. 
|
| Чет Май 05, 2005 3:09 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Аааааа, това е като му се спи на човек не става хубава работата. Компилирам си сорса на gcc, а не на g++. Ама глупавата грешка трудно се открива, щото си мислех, че като му пусна една опция -x c++ ще ползва препроцесора на с++ ама не става явно точно така. Защо ли? 
|
| Чет Май 05, 2005 3:27 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Друга чудесия изникна. В тази част: Там където е дублиран реда. Ако не му поискам два пъти вход, на първия сам си решава че е въведене табулация и преминава направо към stud.vorname без да иска въобще вход от потребителя за stud.name Така както е в монета си работи, но ми е интересно откъде може да идва грешката.
|
| Чет Май 05, 2005 3:55 am |
|
 |
|
0x00
Ранг: Минаващ
Регистриран на: Пет Мар 18, 2005 4:14 pm Мнения: 67 Местоположение: Русе.BG/Oldenburg.DE
|
Останал ти е непрочетен /n някъде в буфера. Чел си нещо директно от там с get(), или input-а е повече от maxN-а на някой предишен getline() и съответно /n остава вътре, или нямам представа защо. Както и да е, преди да го четеш наново го накарай да игнорира всичко преди този /n със:
Особено ако някой ще ти проверява кода, никак не е разумно това "измъкване" с двойното викане на getline(); представи си, че байтовете преди /n в буфера отново са повече от maxN-a 
|
| Чет Май 05, 2005 4:33 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Нов проблем, този е по интересен: Ако потребителя въведе некоректна стойност, но integer, програмата се държи нормално и го пита отново за вход, а ако въведе нещо различно от integer, goto го връща на позиция begin1 ... и от там рограмата вллиза в цикъл  . Защо??? Нали съм сложил cin >> i; би трябвало на това място всеки път да спира и да чака вход от конзолата. Къде греша?
|
| Чет Май 05, 2005 4:48 am |
|
|