Ik ben van plan een wikipedia achtig systeem te maken (enkel voor m'n eigen site). Hierover heb ik 2 vragen:
1) Is het best om alles in de database te stoppen (veel tekst), of weg te schrijven naar bestanden. Zelf dacht ik aan een combinatie, informatie over het artikel in de database (id, titel, rechten, ...) en het artikel zelf weg te schrijven naar een bestand. Wat raden jullie me aan?
2) Op Wikipedia kan je de verschillen tussen verschillende versies van het artikel zien. Nu wil ik ook zoiets, alleen, hoe moet dit?
3) Wat is het verschil tussen MyISAM en InnoDB? Welke is best?
1) Ik zou alles in een DB stoppen zodat je ook nog kan zoeken!
2) Dit kan ook beter met een Database
3) Verschil weet ik niet, maar ik gebruik MyISAM en ik ben tevreden!!
1) Alles in een database zetten lijkt mij ook het beste. Daar kan je zoals santacrack al zegt makkelijk in zoeken. Updaten gaat daar ook makkelijker in. Een database is gemaakt om data op te slaan, dus waarom zou je bestanden gebruiken?
2) Op wikipedia is dat erg uitgebreid met reacties en verbeteringen en al dat soort dingen. Ik zou er een paar tabellen voor maken:
- tekst: alleen het id en de tekst
- informatie: id van het artikel, informatie over het artikel, url ernaar, id van de 'standaard' tekstversie ..
- notities: id van het artikel, id van de plaatser van de notitie, tijd, notitie zelf, ...
- tekst_versies: id naar een tekst, tijd van plaatsen, id van degene die iets heeft veranderd
Met een query kan je dan kijken welke tekst getoond moet worden en die inclusief wat informatie er uit halen.
Als je dit met bestanden moet doen heb je echt heel veel werk om te kijken wat bij wat hoort.
1) Ok, dan stop ik alles in de database.
2) Dit kan dan wel beter met de database, maar hoe moet ik het doen?
3) MyISAM lijkt me het beste zo te zien. Ik ben er overigens ook tevreden met.
MySQL geeft zelf ook informatie over het verschil tussen InnoDB en MyISAM..
Edit
Via PhpMyAdmin kon ik de storage-engines van MySQL opvragen:
Storage Engine: Beschrijving:
MyISAM Default engine as of MySQL 3.23 with great performance
MEMORY Hash based, stored in memory, useful for temporary tables
InnoDB Supports transactions, row-level locking, and foreign keys
BerkeleyDB Supports transactions and page-level locking
BLACKHOLE /dev/null storage engine (anything you write to it disappears)
EXAMPLE Example storage engine
ARCHIVE Archive storage engine
CSV CSV storage engine
ndbcluster Clustered, fault-tolerant, memory-based tables
FEDERATED Federated MySQL storage engine
MRG_MYISAM Collection of identical MyISAM tables
ISAM Obsolete storage engine
Niet zo netjes in een tabel als het origineel, wel handig.
Ok, ik heb een database structuur uitgedacht die bij elke wijziging een nieuwe row invult met de nieuwe tekst, zo blijven de oude ook bestaan. Alleen, hoe kan ik de verschillen tussen 2 pagina's vinden (dus tussen die 2 rows in die tabel), hoe maak je zoiets?
Ik zou niet weten hoe je het maakt, maar je kunt het wel zo goed mogelijk proberen na te maken.
Je zou elke wijziging in een andere record zetten, elk geef je een id waarmee je ze kunt koppelen.
Je haalt alle records eruit met dezelfde idnummer. Die ga je dan exploden op spaties oid. Dan kijk je of elke array entry hetzelfde is. Is die niet hetzelfde, dan weergeef je de verandering in bold. Anders blijft ie hetzelfde.
Zo ongeveer zou je het kunnen doen. Er is vast een makkelijkere manier, maar totdat je die manier vind, is dit de beste oplossing