database onderhoud?
Een vraagje...
Ik ga een cms systeem maken en nu wil ik daar een tooltje in maken waarmee gebruikers van het cms systeem een notitie / memo voor zichzelf kunnen maken. Zo kunnen ze er bijvoorbeeld als notitie in zetten "Morgen om 10:00 uur afspraak met Meneer Jansen".
Stel 30 mensen werken met het CMS en die kunnen allemaal hun eigen notities maken. Dan zou het kunnen dat er op een gegeven moment honderden notities in de database staan.
Nu vraag ik me het volgende af. Moet ik dan een maximum aantal notities instellen, zodat men bijvoorbeeld niet meer dan 50 notities kan maken? Of moet ik notities die ouder zijn dan een maand automatisch weggooien?
Ik ben benieuwd hoe jullie daar mee omgaan (of niet?). Hetzelfde geldt bijvoorbeeld op een website met nieuwsberichten. Stel er komen dagelijks 30 berichten op te staan (denk bijvoorbeeld aan deze site). Na verloop van tijd zit de database dan toch "vol"? Hoe los je dit dan op?
Vergeet niet dat een database een hoop kan hebben. Je kan altijd een opruimronde houden om oude notities te verwijderen.
Miljoenen records heeft een database absoluut geen moeite mee. Als het alleen zo uit de klauwen loopt, moet je wel e.e.a. aan database optimalisatie gaan doen, zodat hij niet zo traag als dikke *** wordt...
Kortom, de aantallen die jij noemt, enkelen honderden of duizende records, daar zou ik me geen zorgen over maken.
Gewijzigd op 28/07/2011 18:50:16 door Joren de Wit
Even een leuke opmerking. Sinds gisteren heeft het Fok!forum 100. mln posts gehaald, en dat op een MySQL database.
Als ik me niet vergis draait Tweakers.net ook op een MySQL database. Dus het kan wel gewoon ;-)
Klopt, en ook op PostGreSQL en MongoDB.
Maareh... neem nu even voor het gemak het voorbeeld van de notities... moet je die dan onbeperkt laten staan? Of een limiet op zetten? Of automatisch na zoveel tijd verwijderen?
Aar. jij zegt "Je kan altijd een opruimronde houden om oude notities te verwijderen." Maar dat is toch ook raar? Dan zou ik die handmatig, of via een script moeten verwijderen ofzo??? ...en dan is iedereen ineens z'n notities kwijt. Ik zoek eigenlijk een soort systeem waardoor de database zichzelf "opruimt", maar dan wel op een voor de gebruiker vriendelijke manier. En dat is een beetje waar ik mee zit. Moet ik tegen de gebruiker zeggen dat hij / zij maximaal 50 notities mag hebben? Of is het beter idee om tegen de gebruiker te zeggen dat notities ouder dan x maanden automatisch worden verwijderd? Ik wil zeg maar voorkomen dat de database van het cms gedeelte ongemerkt volloopt. Hebben jullie nog andere tips eventueel?
Je kan ongebruikte data verwijderen als ze bijv. ouder zijn dan een half jaar. Dit kan prima met MySQL.
Vermeld dit wel aan de gebruikers als ze nog zicht hebben op oude notities. Desnoods kan je werken met een 'mappen'-systeem dat ze notities naar een 'saved'-map kunnen verhuizen waar nooit automatisch in geleegd wordt.
Gewijzigd op 28/07/2011 21:06:11 door - Ariën -
(Controleer je zoiets gewoon in de code, of het ouder is dan een half jaar, of doe je dat met een cron job?)
Ik heb het idee dat jij je veel te veel zorgen maakt om iets wat volgens mij nooit vol zal lopen. Hoe groot verwacht jij dat de database zal gaan worden?
Moraal van het verhaal: bespaar je de moeite! K.I.S.S.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Bovenstaande tekst van 250 bytes maal 50 posts per persoon maal 30 personen is 375000 bytes is 375 kbyte is nog geen 0,4 MB oftewel bijna niks.
@SanThe: bedankt voor het voorbeeld. Dat is inderdaad bijna niks en valt dus erg mee.
Even over nadenken wat ik dan ga doen... ik kan me nu in ieder geval beter een voorstelling maken van hoeveel schijfruimte dit nu echt kost (niet veel dus). Thanks!
Misschien de datum van een notitie bijhouden. Indien ouder als 6 maanden, dat de gebruiker een bericht krijgt dat er oude notities in staan? Welke vervolgens de mogelijkheid heeft om het zelf te verwijderen.
Nu ik erover nadenk... misschien is een combinatie ook wel mogelijk. Bijvoorbeeld, "U kunt maximaal 100 notities opslaan. Notities ouder dan een jaar worden automatisch verwijderd." Dat lijkt me ook wel wat. En dan een week van tevoren waarschuwen zoals ik net beschreef. Is dat een goed idee?
Voor de database is het niet nodig, het maakt je script alleen maar complexer, voor de gebruiker kan het een ongemakkelijk gevoel geven. Kortom, volgens mij zijn er geen echte voordelen?
Sowieso ben ik altijd heel terughoudend met DELETE queries op de database. Wil ik de gebruiker iets kunnen laten 'verwijderen', dan betekent dat bij mij in de meeste geval dat het betreffende record een FALSE krijg in de kolom 'active' (of een TRUE in de kolom 'deleted' for that matter).
Ja, dan kun je inderdaad alles handmatig gaan verwijderen, maar dan is het toch handiger om een systeem te hebben dat zichzelf onderhoudt?
Waarom ben je terughoudend met DELETE queries? Bedoel je dat je liever helemaal geen DELETE queries uitvoert, of bedoel je dat je dit liever niet overlaat aan de standaard gebruiker maar uitsluitend aan de webmaster?
Je zou eens in de zoveel tijd alle records die in de kolom 'active' FALSE hebben staan kunnen verwijderen.
Op die manier wordt er door de users nooit iets 'per ongeluk' weggegooid, en hou je zelf de controle over de grootte van je database
Mja, dat zou inderdaad kunnen... maar dan nog steeds blijft de database volstromen als de gebruikers hun notitities niet weggooien... :-s
DELETE queries zijn altijd helemaal definitief (tenzij je backups wilt gaan terugzetten). Hoe vaak komt het niet voor dat een gebruiker toch iets niet had willen verwijderen? Bij mij krijgt de gebruiker nooit direct de beschikking over een DELETE functie, die krijgt hooguit UPDATE rechten. Bouw je een module in die in database onderhoud kan voorzien, dan is dat een plaats waar je DELETE functies terug zou kunnen zien. Maar dat is enkel voorbestemd aan de beheerder en zal dus nooit gebruikt worden tijdens het dagelijks gebruik van de applicatie.
Tenslotte: uiteraard programmeer je natuurlijk heel netjes en zitten er geen lekken in je scripts. Maar stel nu dat je onverhoopt een sql injectie lek in een DELETE query hebt. Dan is het kinderspel om je hele database leeg te gooien!
Oké, thanks... maar hoe gaat dat dan eigenlijk in "normale" situaties? Denk inderdaad aan FOK, of bijvoorbeeld hier op PHPhulp? Dat zijn toch ook heeeeeeeel erg veel berichten en reacties etc.? Op een gegeven moment is je schijfruimte toch gewoon vol? Hoe los je dat dan op? Ga je dan alsnog handmatig dingen verwijderen? Of ga je webruimten bij kopen?