Dins del desenvolupament web hi ha un punt que a vegades no es té en compte quan es desenvolupa: la quantitat de dades a tractar en una taula. Quan aplicació entra en manteniment és habitual rebre peticions de que en algun punt l'aplicació va lenta, per que quan es va desenvolupar no es va valorar correctament l'estructura d'aquell punt i ara es pateixen les conseqüències.
Igualment quan hi ha un munt de dades el rendiment tard o d'hora es resenteix, és pot posar un hardware més potent, línies amb més capacitat però el pressupost marca el límit. És aleshores quan s'han de buscar alternatives. En el cas de la clsDades consisteix en activar la caché per una taula en concret. Normalment quan s'executa una stored procedure QUERY contra una taula amb milions de registres aquesta triga el seu temps, per molt que estiguin ben posats els indexos, total per extreure 20-50 registres d'entre milions. Aquests registres després s'empaqueten en JSON i s'envien al navegador de l'usuari. La caché es dedica a guardar els JSONs més usats, de tal manera que
Per aconseguir això calen varies coses:
- Una taula on guardar el JSON, la taula que es diu CACHE.
- Stored procedures per accedir a aquesta taula.
- Interceptar en el codi les peticions dels grids per tal de veure si cal consultar la cache.
- Interceptar en el codi els INS/UPD/DEL que invaliden la cache.
Començaré per taula cache que té la següent estructura:
- Taula: camp que guarda quina taula estem cachejant.
- Pantalla: pantalla on està el grid que estem cachejant.
- Grid: ID del grid que estem cachejant.
- Pag: pàgina del grid.
- NumRegs: número de registres de la pàgina.
- SortOrder: ordre del grid.
- Filtre: filtre aplicat per obtenir aquests registres. Normalment el trec de la URL i el poso aqui tal com raja.
El codi de creació de la taula:
CREATE TABLE [dbo].[CACHE](
[Taula] [nvarchar](20) NOT NULL,
[Pantalla] [nvarchar](20) NOT NULL,
[Grid] [nvarchar](20) NOT NULL,
[Pag] [int] NOT NULL,
[NumRegs] [int] NOT NULL,
[SortOrder] [nvarchar](30) NOT NULL,
[Filtre] [nvarchar](200) NOT NULL,
[Resultat] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_DI_EXP_CACHE] PRIMARY KEY CLUSTERED
(
[Taula] ASC,
[Pantalla] ASC,
[Grid] ASC,
[Pag] ASC,
[NumRegs] ASC,
[SortOrder] ASC,
[Filtre] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
La resta de temes els tractaré en el següent post. |