Quiero memorizar los resultados de la función para el rendimiento, es decir, rellenar de forma perezosa un caché indexado en los argumentos de la función. La primera vez que llamo a una función, la memoria caché no tendrá nada para los argumentos de entrada, por lo que la calculará y almacenará antes de devolverla. Las llamadas posteriores solo usan el caché.Resultados de la función de almacenamiento en caché en SQL Server 2000
Sin embargo, parece que SQL Server 2000 tiene una estúpida regla arbitraria sobre las funciones que son "deterministas". INSERTES, ACTUALIZACIONES y llamadas a procedimientos almacenados regulares están prohibidos. Sin embargo, se permiten procedimientos almacenados extendidos. ¿Cómo es esto determinista? Si otra sesión modifica el estado de la base de datos, la salida de la función cambiará de todos modos.
Me estoy volviendo loco. Pensé que podría hacer que el almacenamiento en caché sea transparente para el usuario. es posible? No tengo los permisos para implementar procedimientos almacenados extendidos.
EDIT:
Esta limitación se encuentra todavía en 2008. No se puede llamar RAND, por amor de Dios!
La caché se implementaría en la base de datos. La memoria caché es cualquier almacén de datos utilizada para almacenar en caché ...
EDIT:
No hay casos en los que los mismos argumentos a una función dará lugar a resultados diferentes, fuera de los cambios en los datos subyacentes. Esta es una plataforma de BI, y los únicos cambios provienen de la ETL programada, en cuyo momento TRONCARE la tabla de la memoria caché.
Se trata de cálculos de series de tiempo intensivas de E/S, del orden de O (n^4). No tengo el mandato de cambiar la tabla o los índices subyacentes. Además, muchas de estas funciones utilizan las mismas funciones intermedias, y el almacenamiento en caché permite que se utilicen.
Las UDF no son realmente deterministas, a menos que representen cambios en el estado de la base de datos. ¿Cuál es el punto de? ¿Está el caché de SQL Server? (Irónico). Si SQL Server está almacenando en caché, debe estar expirando en los cambios a las tablas que están enlazadas al esquema. Si están enlazados a un esquema, ¿por qué no vincular tablas que la función modifica? Puedo ver por qué los procs no están permitidos, aunque eso es simplemente descuidado; solo esquemas vinculan procs. Y, por cierto, ¿por qué permitir los procesos almacenados extendidos? ¡¡No puedes rastrear lo que hacen para garantizar el determinismo !!! Argh !!!
EDIT:
Mi pregunta es: ¿Hay alguna manera de resultados de la función de caché en una forma que se pueden utilizar con pereza en una vista?
Lo siento, no estaba claro para mí desde la publicación original que creaba la caché "desde cero". ¿Cómo pretendía tratar con casos en los que la misma función, con los mismos argumentos, debería arrojar resultados diferentes? –
¿cuál es tu pregunta? –