Ho una tabella di database che aumenterà di dimensioni di circa 5000 righe all'ora. Per una chiave che vorrei interrogare, la query aumenterà di dimensioni di circa 1 riga ogni ora. Vorrei una pagina web per mostrare le ultime righe per una chiave, 50 alla volta (questo è configurabile). Vorrei provare e implementare memcache per mantenere l'attività del database bassa per le letture.
Se eseguo una query e creo un risultato cache per ogni pagina di 50 risultati, ciò funzionerebbe finché non verrà aggiunta una nuova voce. A quel tempo, la pagina dei risultati più recenti ottiene un nuovo risultato e i risultati più vecchi si riducono. Questo scende verso il basso l'elenco delle pagine memorizzate nella cache che mi inducono ad aggiornare ogni risultato della cache. Sembra un design scadente.
Potrei creare le pagine della cache all'indietro, quindi per ogni pagina richiesta dovrei ottenere le ultime 2 pagine e troncare alla lunghezza corretta di 50. Non sono sicuro che sia buono o cattivo?
Idealmente, il meccanismo che uso per inserire una nuova riga saprebbe anche come invalidare i risultati della cache corretti.
Qualcuno ha già risolto questo problema in modo ampiamente accettabile? Qual è il miglior metodo per farlo?
EDIT:
Se la mia comprensione della cache di query di MYSQL è corretta, ha granularità a livello di tabella in invalidazione . Dato che ho circa 5000 aggiornamenti prima che una query su una chiave debba essere invalidata, sembra che la cache delle query del database non venga utilizzata. MS SQL memorizza nella cache i piani di esecuzione e le pagine di dati a cui si accede frequentemente, quindi potrebbe fare meglio in questo scenario.
La mia query non è contro una singola tabella con TOP N. Una versione ha join a diverse tabelle e un'altra ha sottoseleziona.
Inoltre, poiché voglio memorizzare nella cache la tabella generata in html, mi chiedo se una cache a livello di server Web sia appropriata? Non c'è davvero alcun beneficio per nessun tipo di memorizzazione nella cache? Il miglior consiglio è proprio quello di consentire a una query del sito Web di passare attraverso tutti i livelli e di colpire il database ogni richiesta?