Chtěl bych si založit web na webzdarma kde nabízí 500MB zdarma. Mají dost nedostačující prostor na db a chtěl bych si tedy naprogramovat systém na zápis do souboru a čtení podobně jak je tomu na mysql, ale v jednodušší verzi. SQLite je pro mě částečně náhrada ale jen tam kde se nevyžaduje častý zápis do souboru. Tak například, uživatel se může registrovat a přihlásit do systému pomocí databáze SQLite - v tom není problém. Ale vrámci inzerce má fungovat "samospráva". Každý uživatel bude mít určité body a právo hlasovat nebo schvalovat inzeráty. Pokud to ovšem nebude dělat správně může mu být právo odebráno apod. Nový uživatel má mít např. právo hlasovat o tom jestli nový inzerát bude schválen nebo ne; osvědčený uživatel má právo hlasovat o odebrání práva, o zrušení účtu, o potrestání uživatele apod. Čímž se dostávám k jádru věci. Zde by bylo třeba častého zápisu do souboru s daty. Moje otázka je: jak velké bloky dat je optimální načítat? Dejme tomu že databáze uživatelů se časem rozroste na 100.000 (možná extrém, ale budiž). Tabulka s hlasováním tedy bude mít 100.000 záznamů. Každý záznam má dejmetomu 64 bytů.
Když pošlu přes AJAX příkaz na update záznamu uživatele s id 88888, kde chci updatovat hodnotu pro hlasování... jak optimální bloky načítat, aby sdílený server neměl problém s pamětí? Dejme tomu, že online bude 20-30 lidí a z toho 2 budou zrovna hlasovat během jednoho okamžiku. Co je třeba provést je projít téměř všechny záznamy dokud nenajdu dané id. Ale jak velké bloky nastavit? 64 bytů téměř určitě není ideální - posouvat fseek po 64 bytech je holý nesmysl protože čtení z disku je pomalejší než čtení z paměti. Mám načítat po 4kb? Nebo po 64kb? Co je a co není příliš pro sdílený hosting? Je třeba počítat s tím že samotná aplikace během běhu zabírá paměť a když bude např. 30 lidí online tak to bude záhul? Nevím co si dovolit.
Říkám si že texty inzerátů se dají uložit zvlášť do SQLlite, protože inzeráty se neukládají často. Tabulka se vzkazy, tu bych měl asi navrhnout jako vlastní systém zápisu do souboru, protože uživatelé si budou často psát. Další tabulka je tabulka s informacemi o počtu vzkazů které odešly, přišly, přečtené.... Takže takových tabulek tam bude více.
Příklad s tabulkou o hlasování asi není ideální. Předpokládejme že bych měl nějakou "mapku" záznamů která bude mít velikost 100000x4byty. Tam si najdu záznam s id 88888 a zjistím na který řádek mám skočit. Ale pokud bych chtěl procházet třeba tabulku s inzeráty, kde je třeba procházet sloupce a porovnávat jejich hodnoty se zadáním, tak to by už nejspíš chtělo načítat po rádcích/blocích. Tedy mohu mít texty inzerátů v jiné tabulce než sloupce co mají pevný číselný rozměr. Procházel bych tedy tu tabulku s pevným rozměrem, kde by délka mohla být např. 64 bytů. K této bych potřeboval znát velikost. Nebo mám psát aplikaci tak, abych mohl změnit velikost bloku podle počtu řádků, který si nastavím aktuálně podle potřeby? Podle toho co je nejvýkonnější řešení?