Ik volg hem niet helemaal meer. Ben nu door een paar pagina's van deze thread heengerend en volgens mij zeg je ergens dat je allerlei cache-constructies hebt geïntroduceerd omdat alles zo traag is, maar bovenaan deze pagina claim je dat het systeem (heel) snel werkt. Mja cache uitlezen zou snel moeten gaan, maar houdt dat in dat er ondertussen 24/7 allerlei crons staan te stampen om deze cache-bestanden te bouwen ofzo?
Als ik bijvoorbeeld naar de eerder geplaatste tabelstructuur kijk:
CREATE TABLE `systeem_invoertotaal` (
`account` int(11) DEFAULT NULL,
`id` int(11) NOT NULL,
`id_user` int(11) DEFAULT NULL,
...
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
En dan hebben we het (nog) niet (eens) over naamgeving of mogelijke koppeltabellen voor de ENUMs of wat dan ook.
De engine die wordt gebruikt is MyISAM. Dit houdt in dat het niet mogelijk is om echte koppelingen tussen tabellen te leggen (tenzij je dit via code probeert af te dwingen wat mij een heel slecht idee lijkt). Dit is dus geen echte
relationele database - de tabellen in deze database hangen letterlijk als los zand aan elkaar. Wat je tot nu toe hebt beschreven klinkt sterk als een uitgebreid, en mogelijk ook complex, administratief systeem.
Bij applicaties waar het zeer belangrijk is dat alle informatie (onderling) klopt is een relationele database niet eens meer de gedoodverfde keuze, maar eigenlijk de énige keuze. Deze applicatie maakt echter gebruik van MyISAM, en niet van InnoDB, waar onderlinge relaties, databasetransacties et cetera wel mogelijk zijn, dit zijn voorzieningen die echt enorm belangrijk en enorm handig zijn om je data kloppend te houden.
Dus in zekere zin is wat mij betreft de database-opzet al letterlijk en figuurlijk fundamenteel verkeerd.
Okay, je hebt nu een werkende situatie en alles doet wat het zou moeten doen. Maar nu begint de schoen (toch echt) te wringen en komen de beperkingen van de huidige aanpak steeds duidelijker naar voren.
Mogelijk is de reden dat alles zo traag is is dat je misschien geen indexen hebt aangebracht op kolommen? Misschien heb je dit niet aangegeven in je CREATE TABLE statement, maar bestaan er ook queries in jouw systeem die andere tabellen aan systeem_invoertotaal koppelt met behulp van
account of
id_user? Als die kolommen namelijk niet geïndexeerd zijn (heeft systeem_invoertotaal uberhaupt een primaire sleutel?!) worden dat soort queries echt enorm traag...
Ook heb je nu al een aantal keren beschreven wat het systeem ongeveer doet. Als je dit nu eens wat verder uitwerkt dan heb je een complete functionele spec (volgens mij had ik dit al eens eerder voorgesteld?).
Dan is er nu al bijna twee pagina's een (sub)conversatie aan de gang over in feite arrays waarbij het onderscheid tussen:
$test = array('key' => 'value');
en
$test = array('value');
Niet echt duidelijk lijkt.
Als een 'key' niet gedefinieerd is dan wordt een numerieke nummering aangehouden, startend op index 0, tenzij anders aangegeven. In het tweede geval bestaat $test['key'] (of $test['value'], for that matter) niet, maar is 'value' alleen bereikbaar via $test[0] (de waarde op element 0). Als je elementen wilt aanspreken via een (textuele) naam, dan zul je expliciet sleutels/keys moeten definiëren.
Ook begrijp ik niet helemaal waarom er totaal geen
interpunctie in je reacties zit, tenzij je via een telefoon of tablet berichten aan het kloppen bent, maar ik zou het wel zo netjes vinden als je berichten en reacties op zijn minst een soort van uitstraling hebben die impliceert dat er wat zorg en aandacht wordt besteed aan de verwoorde gedachten.
Ik denk ook dat de consensus hier een beetje de volgende is: het is onverstandig om nog verder te bouwen (te "stapelen") in de huidige applicatie. Ik snap dat je code wilt refactoren (omschrijven naar iets beters) maar de vraag is of de huidige structuur op die manier echt te redden valt.
Dit is misschien niet wat je wilt horen, maar dit is denk ik het vriendelijkste advies wat wij je kunnen geven. Dit doen we niet om jouw applicatie de grond in te stampen ofzo, maar dit doen wij omdat wij zelf dit traject ook doorlopen hebben en uiteindelijk hebben moeten constateren, ook door ondertussen opgedane kennis etc, dat er andere en betere manieren zijn om dit aan te vliegen.
Wij kunnen niet verwachten dat je ineens het licht ziet, dit is een traject waarbij je dit zelf allemaal doorloopt, ervaring opdoet, eens wat oude code van jezelf bekijkt en denkt "ayaya dat kan anders" etc.. Of je moet zoiets hebben van "ik heb noch de tijd noch de inclinatie om mij hier in te verdiepen, tis mij allemaal Chinees" en dan heb je het voorgenoemde verhaal (functionele spec) waarmee je naar een bureau kunt stappen ofzo.
Maar wees vooral eerlijk tegenover jezelf, ik snap dat dit systeem jouw "kindje" is maar neem onze woorden ter harte, dit doen wij echt niet uit een soort van kwade wil of betweterigheid ofzo.