Ik ben momenteel bezig met het ontwikkelen van een nieuw community-systeem. Het is een soort CMS, maar dan met de nadruk op Heel veel user-interactie (beetje richting een forum) en behoorlijk hoge bezoekersaantallen.
In de vorige versie van het systeem had ik een zogenaamde Text-tabel. Als ik ergens een textveld nodig had dan maakte ik een nieuw record in de text-tabel, en sloeg ik het ID op bij het item. In de text-tabel sloeg ik 2 text-velden op: een met de UBB-code, en een met de geconverteerde XHTML-code.
Dit had als voordeel dat de database-structuur vrij schoon en overzichtelijk bleef, maar het grote nadeel was dat ik eindeloos aan het left-joinen ben als ik texten bij items wil hebben. Daarnaast is bij een van de sites de text-tabel de 2Gb al voorbij, en heb ik de max-table-sizes van mysql moeten opkrikken.
Voor de nieuwe versie is het dus zaak om dingen zo efficient mogelijk aan te pakken, en ook de bovenstaande structuur nog eens goed te overdenken. Ik ben al op zoek geweest naar hoe andere enterprise-systemen dergelijke dingen aanpakken, maar dit is tot nog toe vrij vruchtenloos geweest.
Andere oplossingen zouden zijn:
Alleen de UBB bij het item opslaan
+ Supersimpele structuur
+ Wijzigen van de text is relatief makkelijk
-- Bij iedere pageview (of generatie van cache) moeten alle UBB-texten naar XHTML worden omgezet.
Alleen de XHTML bij het item opslaan
+ Supersimpele structuur
+ Bij weergave geen actie
- Bij iedere wijziging van de text moet de XHTML terug-geconverteerd worden naar UBB zodat de user aanpassingen in zijn UBB-code kan doen. Dit lijkt me erg foutgevoelig
Zowel UBB als XHTML bij het item opslaan
+ Geen belasting bij het weergeven, bij een select selecteer je gewoon het UBB-veld niet
+ Geen problemen bij editten, je selecteerd dan gewoon de UBB, en converteert deze bij het opslaan naar XHTML
- Ieder item krijgt 2 textvelden, tabellen worden hierdoor (onnodig?) groter
Houden zoals het was
+ relatief makkelijk weergeven
+ makkelijk wijzigen
- Veel te veel left joins
Wat lijkt jullie de beste oplossing? Nog andere ideeen?
Graag jullie reactie/commentaar
In de vorige versie van het systeem had ik een zogenaamde Text-tabel. Als ik ergens een textveld nodig had dan maakte ik een nieuw record in de text-tabel, en sloeg ik het ID op bij het item. In de text-tabel sloeg ik 2 text-velden op: een met de UBB-code, en een met de geconverteerde XHTML-code.
Dit had als voordeel dat de database-structuur vrij schoon en overzichtelijk bleef, maar het grote nadeel was dat ik eindeloos aan het left-joinen ben als ik texten bij items wil hebben. Daarnaast is bij een van de sites de text-tabel de 2Gb al voorbij, en heb ik de max-table-sizes van mysql moeten opkrikken.
Voor de nieuwe versie is het dus zaak om dingen zo efficient mogelijk aan te pakken, en ook de bovenstaande structuur nog eens goed te overdenken. Ik ben al op zoek geweest naar hoe andere enterprise-systemen dergelijke dingen aanpakken, maar dit is tot nog toe vrij vruchtenloos geweest.
Andere oplossingen zouden zijn:
Alleen de UBB bij het item opslaan
+ Supersimpele structuur
+ Wijzigen van de text is relatief makkelijk
-- Bij iedere pageview (of generatie van cache) moeten alle UBB-texten naar XHTML worden omgezet.
Alleen de XHTML bij het item opslaan
+ Supersimpele structuur
+ Bij weergave geen actie
- Bij iedere wijziging van de text moet de XHTML terug-geconverteerd worden naar UBB zodat de user aanpassingen in zijn UBB-code kan doen. Dit lijkt me erg foutgevoelig
Zowel UBB als XHTML bij het item opslaan
+ Geen belasting bij het weergeven, bij een select selecteer je gewoon het UBB-veld niet
+ Geen problemen bij editten, je selecteerd dan gewoon de UBB, en converteert deze bij het opslaan naar XHTML
- Ieder item krijgt 2 textvelden, tabellen worden hierdoor (onnodig?) groter
Houden zoals het was
+ relatief makkelijk weergeven
+ makkelijk wijzigen
- Veel te veel left joins
Wat lijkt jullie de beste oplossing? Nog andere ideeen?
Graag jullie reactie/commentaar