програма на "С" + DOS + база от данни = ???
5 отговора
307 прегледа
програма на "С" + DOS + база от данни = ???
Здравейте!
Опитвам се да направя една програма на "C", за която ми е необходима доста голяма база от данни. Всъщност това е първата ми сериозна програма и затова не съм наясно с много неща и затова както сте забелязали доста често вися в този форум.
Та дначи идеята ми беше данните да записвам във файл с fwrite(); като преди това на всяка данна определям мястото и с fseek(); чрез отместване от началото на файла - нейния специвичен номер, които съм и дал при въвеждането. Номера с 6 символа. До тук всичко вървеше много добре, защото после като се наложи да изведа дадена данна на екрана просто я намирам с fseek() като за отместване от началото на файла задам нейния специфичен номер. Така търсенето става доста бързо. Но когато се опитах да осъществя идеята си се оказа, че ако се опитам в празен файл да запиша данна с номер да речем 991256 (съответно отместване от началото на файла fseek(файл, 991256*sizeof(данна), начало)), се получава един файл с размер близо 342 МЕГА байта.
Очевидно удобното търсене е за сметка на размера, но това не ми върши нисасва работа.
Вие как бихте изградили една такава база от данни.
Едва ли базата ми ще се напълни с 991256 елемента, но намерата на елементите са произволни и като нищо може да бъде избран този номер 991256 и файла да стане 342 мега байта за една кирлива програма на DOS.
Повече ми е необходимо бълзото търсене, но пък този размер на файла изобщо не е нормален.
Моля, дайте някакви идеи.
Благодаря Ви!
Опитвам се да направя една програма на "C", за която ми е необходима доста голяма база от данни. Всъщност това е първата ми сериозна програма и затова не съм наясно с много неща и затова както сте забелязали доста често вися в този форум.
Та дначи идеята ми беше данните да записвам във файл с fwrite(); като преди това на всяка данна определям мястото и с fseek(); чрез отместване от началото на файла - нейния специвичен номер, които съм и дал при въвеждането. Номера с 6 символа. До тук всичко вървеше много добре, защото после като се наложи да изведа дадена данна на екрана просто я намирам с fseek() като за отместване от началото на файла задам нейния специфичен номер. Така търсенето става доста бързо. Но когато се опитах да осъществя идеята си се оказа, че ако се опитам в празен файл да запиша данна с номер да речем 991256 (съответно отместване от началото на файла fseek(файл, 991256*sizeof(данна), начало)), се получава един файл с размер близо 342 МЕГА байта.
Очевидно удобното търсене е за сметка на размера, но това не ми върши нисасва работа.
Вие как бихте изградили една такава база от данни.
Едва ли базата ми ще се напълни с 991256 елемента, но намерата на елементите са произволни и като нищо може да бъде избран този номер 991256 и файла да стане 342 мега байта за една кирлива програма на DOS.
Повече ми е необходимо бълзото търсене, но пък този размер на файла изобщо не е нормален.
Моля, дайте някакви идеи.
Благодаря Ви!
Re: програма на "С" + DOS + база от данни = ???
Mdaaa - maj ne si si premeril maslinkata ;-)))
Ne se obijdaj ama zasto si se hwanal s nesto podobno - pri polozenie 4e w momenta ima dostata4no DBEngines -ta da pishesh swoia - ako tolkowa darjish da e pod dos - ami polzwaj DBase, Clipper ili nesto podobno - pone niama da ima nuzda da pishesh uprawlenieto na bazata danni (tablici, zaiawki, indeksi).
Ta kato kazah indeks - towa mu e majkata - w twoia slu4aj. Towa koeto ti e hrumnlo kato parwona4alna ideia e super lesno -ama opitaj se da si predstawih baza danni ot niakolko miliarda zapisa wseki ot koito e goliam po okolo 32Kb - kolko miasto ste glatne. I taka obesniwam kak mozesh da izlezesh ot kriwoto polozenie (ako iskash da prodalzish)
1. Oswen osnownata tablica (ili osnownia fajl s dannite) prawish i edin dopylnitelen - nare4en index file - kakwo ste ima w nego - ami predstawi si edna tablica ot 2 koloni - 1 -ta e klu4a - tozi nomer kojto si zalozil, a wtorata e otmestwaneto w realnata baza danni (ili po towa ste seek-wash)
2. Darzish indeksa sortiran - za da e po barzo tarseneto w nego - tuk ima 1001 na4ina za uskoriawane na nestata - ama ne mi se zanimawa da gi obesniawam. Skorostta na rabota na programata ti zawisi imenno ot tazi 4ast. Ne zabrawiaj 4e oswen operacii za 4etene ste imash takiwa za dobawiane na zapis i iztriwane - a te imenno ste sa po trudni za realizirane.
3. Za wseki slu4aj si prawish i edna funkcia koiato da ti sinhronizira indeksa (w slu4aj na greshka - a takiwa ste izobilstwat dokato testwash programata)
Ami towa e - ama bih te posawetwal da pro4etesh towa onowa otnosno sazdawaneto na bazi danni - ste ti e polezno - wiz za kniga w momenta ne se sestam
---
Е т'ва е живот!
Ne se obijdaj ama zasto si se hwanal s nesto podobno - pri polozenie 4e w momenta ima dostata4no DBEngines -ta da pishesh swoia - ako tolkowa darjish da e pod dos - ami polzwaj DBase, Clipper ili nesto podobno - pone niama da ima nuzda da pishesh uprawlenieto na bazata danni (tablici, zaiawki, indeksi).
Ta kato kazah indeks - towa mu e majkata - w twoia slu4aj. Towa koeto ti e hrumnlo kato parwona4alna ideia e super lesno -ama opitaj se da si predstawih baza danni ot niakolko miliarda zapisa wseki ot koito e goliam po okolo 32Kb - kolko miasto ste glatne. I taka obesniwam kak mozesh da izlezesh ot kriwoto polozenie (ako iskash da prodalzish)
1. Oswen osnownata tablica (ili osnownia fajl s dannite) prawish i edin dopylnitelen - nare4en index file - kakwo ste ima w nego - ami predstawi si edna tablica ot 2 koloni - 1 -ta e klu4a - tozi nomer kojto si zalozil, a wtorata e otmestwaneto w realnata baza danni (ili po towa ste seek-wash)
2. Darzish indeksa sortiran - za da e po barzo tarseneto w nego - tuk ima 1001 na4ina za uskoriawane na nestata - ama ne mi se zanimawa da gi obesniawam. Skorostta na rabota na programata ti zawisi imenno ot tazi 4ast. Ne zabrawiaj 4e oswen operacii za 4etene ste imash takiwa za dobawiane na zapis i iztriwane - a te imenno ste sa po trudni za realizirane.
3. Za wseki slu4aj si prawish i edna funkcia koiato da ti sinhronizira indeksa (w slu4aj na greshka - a takiwa ste izobilstwat dokato testwash programata)
Ami towa e - ama bih te posawetwal da pro4etesh towa onowa otnosno sazdawaneto na bazi danni - ste ti e polezno - wiz za kniga w momenta ne se sestam
---
Е т'ва е живот!
Re: програма на "С" + DOS + база от данни = ???
Освен по-горе казаното:
1. Забрави за fwrite и fread. Препоръчвам ти write и read, или _dos_write и _dos_read. Те са по-подхоящи за случая (прочети хелпа и как се прави lock на запис). Прочети как се прави буфериране....
2. Ако се разтърсиш из INTERNET със сигурност ще намериш някъде API към dBase. Не че ти препоръчвам точно dBase, но за начало и това става.
3. И два въпроса (на които ти трябва да си отговориш първо)
3.1. Защо като платформа си избрал DOS ?
3.2. Защо искаш да си пишеш собствена db engine?
4. Това е. Успех!
1. Забрави за fwrite и fread. Препоръчвам ти write и read, или _dos_write и _dos_read. Те са по-подхоящи за случая (прочети хелпа и как се прави lock на запис). Прочети как се прави буфериране....
2. Ако се разтърсиш из INTERNET със сигурност ще намериш някъде API към dBase. Не че ти препоръчвам точно dBase, но за начало и това става.
3. И два въпроса (на които ти трябва да си отговориш първо)
3.1. Защо като платформа си избрал DOS ?
3.2. Защо искаш да си пишеш собствена db engine?
4. Това е. Успех!
Re: програма на "С" + DOS + база от данни = ???
Наистина си отговори на въпроси 3.x от предното мнение. Като задължителни ти препоръчвам да прочетеш някои книги за Релационни бази данни.
Успех.
Никога не е късно човек да се провали!
Успех.
Никога не е късно човек да се провали!
Re: програма на "С" + DOS + база от данни = ???
Страшно си ми симпатичен
Спомням си лятото на 1982 или '83, когато на плажа вместо да се радвам на гаджетата
бях потънал в цяла гора от дървета (предимно двоични)
Всичко, което ти казаха по-горе за готовите dbengine е точно, но аз смятам, че правенето на подобни играчки много помага.
Сега нека и аз да се опитам да ти дам някои ЦУ.
1. Нека всеки запис да се състои от:
Key-твоят специфичен номер
Left- номер на запис (отместване от началото на файла) с Key<от този
Right- номер на запис с Key>от този
AnyData - останалата информация на записа
2. За останалото помисли сам
Спомням си лятото на 1982 или '83, когато на плажа вместо да се радвам на гаджетата
Всичко, което ти казаха по-горе за готовите dbengine е точно, но аз смятам, че правенето на подобни играчки много помага.
Сега нека и аз да се опитам да ти дам някои ЦУ.
1. Нека всеки запис да се състои от:
Key-твоят специфичен номер
Left- номер на запис (отместване от началото на файла) с Key<от този
Right- номер на запис с Key>от този
AnyData - останалата информация на записа
2. За останалото помисли сам
Re: програма на "С" + DOS + база от данни = ???
Nameri si source na BTree (ne e binary tree ako towa si mislish)
iz internet ima dosta. Dosta podhodiashi sa za indexirane
zashtoto oswen logaritmichno wreme za tyrsene ti dawat i wyzmojnst
za posledowatelno chetene w sortiran wid...
Nawremeto polzwah edna DB engine za C++ pod dos - CodeBase
ima cialata funkcionalnost na razni DBase, Clipper i FoxPro, mai :)
wsyshnost po edno wreme w doctor dobb's widiah reklama che
imat i wersia za windoze i linux.
oswen towa edno wreme si spomniam che kym Sybase SQL (5??) servera imashe
wyzmojnost da se prawiat zaiawki ot DOS... neznam sega nowite
serveri dali imat takiwa biblioteki... moje prtosto da sa zariazali poddryjkata
na DOS... ne sym se intersuwal, shtoto naposledyk niamam mnogo rabota s DB :)
iz internet ima dosta. Dosta podhodiashi sa za indexirane
zashtoto oswen logaritmichno wreme za tyrsene ti dawat i wyzmojnst
za posledowatelno chetene w sortiran wid...
Nawremeto polzwah edna DB engine za C++ pod dos - CodeBase
ima cialata funkcionalnost na razni DBase, Clipper i FoxPro, mai :)
wsyshnost po edno wreme w doctor dobb's widiah reklama che
imat i wersia za windoze i linux.
oswen towa edno wreme si spomniam che kym Sybase SQL (5??) servera imashe
wyzmojnost da se prawiat zaiawki ot DOS... neznam sega nowite
serveri dali imat takiwa biblioteki... moje prtosto da sa zariazali poddryjkata
na DOS... ne sym se intersuwal, shtoto naposledyk niamam mnogo rabota s DB :)