Toon posts:

[C++] Databeheer ... een textbestandje?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb even een vraagje. Ik ben bezig om met C++ een simpel aanwezigheidssyteem te schrijven. In dit systeem moet je kunnen melden of je aanwezig bent of niet. Verder moet je doormiddel van inloggen je status kunnen veranderen.

Waar ik nu mee zit is: wat is de beste manier om op te slaan welke users er zijn en wat hun status is. Ik vind het een beetje zonde om een hele database op te zetten voor 1 tabel, dus zat ik te denken aan een tekstbestandje. Het probleem lijkt mij dan echter dat als twee mensen identiek te gelijk hun status willen wijzigen dat dat niet zal gaan, aangezien een van de twee het tekstbestandje als eerste weg zal moeten schrijven en de andere hierdoor geen toegang kan krijgen. Zo kan iemand dus denken "afwezig" te zijn terwijl dit niet het geval hoeft te zijn. Wat is wijsheid hiermee? Is het slim om gewoon een tekstbestand te gebruiken en de gebruikers een foutboodschap voor te schotelen als er iemand tegelijk in het bestand wil schrijven? Of is er een betere manier om de data op te slaan?

Bij voorbaat dank...

Verwijderd

Tekstbestandje of XML zullen het wel doen.

Over tegelijk weschrijven: Je moet er gewoon voor zorgen dat dat niet kan! Bijv.:

- voor elke user gebruik je een apart bestandje
- een queue te gebruken, je stopt de status-veranderingen in die queue, en je laat een object (in een andere thread liefst) die queue regelmatig uitlezen. De veranderingen worden dus één per één naar file weggeschreven, door dat éne object dat de queue pollt.

  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
Een database is toch sneller dan zelf het wiel nog een keer utivinden IMHO.

Als je dan toch XML wilt gebruiken, zou je kunnen kijken naar bijv Xerces. Hoef je iig geen XML parser meer te schrijven enzo.

Maar omdat dit P&W is, en het natuurlijk leuk is om te prutsen:

* je zou ook voor elke user een bestandje kunnen bijhouden.
* je moet wel een locking mechanisme bouwen om te zorgen dat er niet twee tegenlijkertijd kunnen schrijven naar de file, maar het is makkelijk te checken of hij al open is, dus je kan de file open houden totdat je er helemaal klaar mee bent.

edt:oeps.. voortaan sneller typen een eerder refreshen :)

[ Voor 6% gewijzigd door 12_0_13 op 10-09-2004 11:55 ]


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Verwijderd schreef op 10 september 2004 @ 11:41:
Ik vind het een beetje zonde om een hele database op te zetten voor 1 tabel, dus zat ik te denken aan een tekstbestandje.
Ik zou je toch aanraden om voor de database aanpak te gaan. In het vervolg van je post ga je namelijk zoeken naar oplossingen voor een probleem dat door je database opgelost wordt. Beetje zonde om daar dan geen gebruik van te maken niet?

Bovendien weet je niet of het wel bij 1 tabel zal blijven. Bovendien willen misschien andere mensen ook wel wat met de gegevens doen? Wat hebben ze dan aan wat filetjes in een of andere directory?

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Verwijderd

12_0_13 schreef op 10 september 2004 @ 11:55:* je zou ook voor elke user een bestandje kunnen bijhouden.
* je moet wel een locking mechanisme bouwen om te zorgen dat er niet twee tegenlijkertijd kunnen schrijven naar de file, maar het is makkelijk te checken of hij al open is, dus je kan de file open houden totdat je er helemaal klaar mee bent.

edt:oeps.. voortaan sneller typen een eerder refreshen :)
best wel humor, we denken aan hetzelfde, we schrijven het bijna identiek op, ... :)

  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
offtopic:
Great minds think alike, toch :p

Verwijderd

Topicstarter
Ik heb de reacties gelezen en er staan zeker nuttige dingen bij, ik heb alleen een paar opmerkingen.

* Op het systeem waar ik het aanwezigheidssysteem ga instaleren kan ik geen andere software instaleren dus ook geen database software. Ik wou dat ik een database kon gebruiken dat zou het einde van al mijn problemen betekenen :(

* Het systeem is puur bedoeld als aanwezigheidsmeter. Het enige wat er aan data in zal staan zijn de namen van de mensen die geregistreerd zijn en hun status, that's it.

* Ik denk idd dat ik XML bestandjes ga gebruiken het zal wel iets worden in de trant van:
<gebruiker>
<naam>Jaap</naam>
<status>Aanwezig</status>
</gebruiker>
Of kan dat efficienter?

* Is het slim dat als iemand naar een bestand gaat schrijven om via een try te kijken of het resultaat positief of negatief is? Als het positief is kan je het verder laten gaan, maar als het negatief is dan geeft hij een foutmelding zoals "Iemand anders schrijft momenteel in het bestand, probeer het opnieuw". Aangezien het wegschrijven naar een bestand bijzonder kort duurt en er maar een mannetje of 10 zijn die van dit systeem gebruik maken, zal dit sowieso niet zo vaak voorkomen maar wel de meeste problemen oplossen dunkt mij?

  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
Nog simpeler kan ook hoor:

bijv: "Henk.txt" met daarin "aanwezig" of "afwezig"

Je moet even nadenkden over wat je wilt doen als er meer schrijfacties tegelijk gebeuren. (kans zal wel klein zijn)

Maar "software installeren", sommige DB syustemen zijn gewoon wat files die je aan kan klikken, niet echt installeren

Verwijderd

Topicstarter
12_0_13 schreef op 10 september 2004 @ 15:51:
Maar "software installeren", sommige DB syustemen zijn gewoon wat files die je aan kan klikken, niet echt installeren
Zoals? Als het zo kan graag natuurlijk :p

  • Obliterator
  • Registratie: November 2000
  • Laatst online: 30-04 16:09
Kijk eens naar sqlite met een C++ wrapper, werkt erg leuk vindt ik zelf.
Sqlite is een database in 1 file, met een groot deel van de SQL92 standaard geimplementeerd.

http://www.sqlite.org
Pagina: 1