2011-09-09 13 views
6

Estoy trabajando en una aplicación que requiere un campo de autocompletar en un formulario de búsqueda. La aplicación es CFML en Railo 3.3. Estoy usando jQuery UI autocompletar y han puesto en práctica las operaciones de búsqueda en el lado del servidor de la siguiente manera:Caché de consultas para alimentar el autocompletado de jQuery

private struct function getStationDetails(required numeric uic) 
{ 
    var qryCacheStations = new query(); 
    var qryStations = new query(); 
    var cacheData = ""; 
    var resultData = ""; 
    var stcResult = {}; 

    qryCacheStations.setDatasource(variables.instance['dataSource']);  
    qryCacheStations.setSQL("select distinct uic, name, crs from stations order by name"); 
    qryCacheStations.setCachedwithin(createTimeSpan(1,0,0,0)); 
    cacheData = qryCacheStations.execute().getResult(); 

    qryStations.setDBType("query"); 
    qryStations.setAttributes(srcTbl = cacheData); 
    qryStations.setSQL("select name, crs from srcTbl where uic = :uic"); 

    qryStations.addParam(name="uic",value=arguments.uic,CFSQLType="CF_SQL_INTEGER"); 

    resultData = qryStations.execute().getResult(); 

    stcResult = { 
     name = resultData['name'][1], 
     crs = resultData['crs'][1] 
    } 

    return stcResult; 
} 

Básicamente estoy cargando toda la lista de emisoras en la memoria caché en la primera búsqueda, con una caducidad de 1 día (los datos raramente cambian), luego usando una consulta de consultas para devolver los resultados relevantes al cliente.

Mi pregunta es simplemente esto; ¿Es este buen caching y la técnica de QoQs un buen patrón? El rendimiento parece bueno y la huella de memoria es razonable (el conjunto de datos es bastante pequeño), por lo que 'se siente' bien, pero estoy buscando algún consejo de aquellos que tal vez lo hayan intentado antes y hayan descubierto problemas.

Cualquier idea sería muy apreciada.

+0

Creo que lo has clavado :). Yo uso esto todo el tiempo. –

+0

¿Railo tiene cachePut() y cacheGet()? podría ser más flexible que Cachedwithin cuando llegue el momento de vaciar el caché – Henry

+0

@Henry; de hecho, tiene cachePut() y cacheGet(). Estoy usando esas funciones de almacenamiento en caché con EHCache para otros tipos de datos, pero el caché de consultas es ideal para el almacenamiento en caché directo de DB. Además, Railo admite la etiqueta que le permite vaciar el caché de consultas si es necesario. –

Respuesta

1

puede utilizar el automóvil Jquery completa

cacheLength: número

para establecer el almacenamiento en caché permite al lado del cliente por lo que el número de llamadas a servidor puede reducirse y el rendimiento se puede mejorar

0

Utilicé esta misma técnica con gran éxito.

Definitivamente está haciendo lo correcto, suponiendo que sus datos no crezcan inesperadamente.

Cuestiones relacionadas