Pregunta

Actualmente estoy trabajando en una gran aplicación de Clase::DBI para una base de datos existente, y estoy corriendo en un problema con la limpieza de la caché de la Clase::DBI.Este es un mod_perl aplicación, por lo que una instancia de una clase pueden ser muy antiguos entre las veces que se accede.Desde el hombre de las páginas he encontrado dos opciones:

Music::DBI->clear_object_index();

Y:

Music::Artist->purge_object_index_every(2000);

Ahora, cuando puedo añadir clear_object_index() al método DESTROY, parece correr, pero en realidad no vaciar la caché.Soy capaz de cambiar manualmente la base de datos, vuelva a ejecutar la solicitud, y es todavía la versión antigua.purge_object_index_every dice que se borra el índice de cada n de las solicitudes.La configuración de esta a "1" o "0", parece claro que el índice de...a veces.Yo esperaría que uno de los dos a trabajar, pero por alguna razón no lo hace todo el tiempo.Más como 1 de cada 5 veces.

Cualquier sugerencia para borrar esto?

¿Fue útil?

Solución

El "problemas comunes"la página en el Clase::DBI wiki tiene un sección sobre este tema.La solución más simple es deshabilitar el objeto directo índice completo el uso de:

$Class::DBI::Weaken_Is_Available = 0;

Otros consejos

$obj->dbi_commit();puede ser lo que usted está buscando, si usted tiene pendiente de las transacciones.Sin embargo, esto no es muy probable, ya que tiende a completar cualquier persistente de transacciones automáticamente en la destrucción.

Al hacer esto:

Music::Artist->purge_object_index_every(2000);

Le está diciendo a examinar el objeto caché de cada 2000 objeto de cargas y eliminar cualquier muertos referencias para conservar el uso de la memoria.Yo no creo que eso sea lo que usted desea en absoluto.

Además,

Music::DBI->clear_object_index();

Elimina todos los objetos que forman el objeto directo de índice.Yo no sé cómo esto ayudaría en absoluto;no es lavado en el disco, la verdad.

Suena como lo que usted está tratando de hacer el trabajo igual de bien, de la manera que usted tiene, pero puede haber un problema con el SQL o en otros lugares que es la prevención de la INSERCIÓN o ACTUALIZACIÓN de trabajar.Estás haciendo la comprobación de errores para cada consulta de base de datos como la perldoc sugiere?Tal vez usted puede comenzar allí o en su base de datos de los registros de errores, viendo las consultas para ver por qué no se está siendo completado o si alguna vez llegan.

Espero que esto ayude!

He usado remove_from_object_index con éxito en el pasado, de modo que cuando una página se llama que modifica la base de datos, siempre de forma explícita restablecer ese objeto en la caché como parte de la página de confirmación.

Debo señalar que la Clase::DBI es obsoleto y debe portar su código DBIx::Class en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top