2012-07-22 8 views
10

Estoy usando NDB con python 2.7 con el modo de enhebrado activado.¿Es mejor consultar por keys_only = True luego de get_multi o solo consulta completa?

Entiendo que la consulta de entidades con NDB no utiliza memoria caché o memoria caché local, sino que va directamente al almacén de datos a diferencia de obtener el nombre de la clave. (El resto de la pregunta puede ser redundante si esta premisa no es correcta.)

Por lo tanto, ¿un buen paradigma sería consultar solo con keys_only = True y luego hacer un get_multi para obtener las entidades completas?

Las ventajas serían que keys_only = consultas verdaderos son mucho más rápido que keys_only = False, get_multi potencialmente podrían simplemente presionar Memcache & llamando get_multi sus entidades ahora se guardan en Memcache en caso de tener que hacer la consulta de nuevo.

Los inconvenientes son que ahora tiene una llamada de consulta RPC + llamada get_multi y creo que hay un límite de cómo pueden las entidades llamar en un get_multi, por lo tanto, su tamaño de consulta efectiva podría estar limitado.

¿Qué opinas? ¿Deberíamos consultar usando keys_only = True y luego realizar get_multi? ¿Existen ciertos límites mínimos y máximos de tamaño de consulta que hacen que esta técnica no sea tan efectiva como hacer una consulta que devuelva las entidades completas?

+1

Tenga en cuenta el patrón de acceso a los datos de la aplicación, si es poco probable que una parte significativa de los resultados de la consulta se guarde en caché o que no vuelva a utilizarse durante un tiempo, siempre tendrá una tasa de error de caché alta. En cuanto a las comparaciones directas de rendimiento entre las claves solo consulta y get_multi frente a una consulta normal, ¿por qué no ejecuta algunas pruebas en su patrón de uso previsto? –

Respuesta

Cuestiones relacionadas