2010-03-15 13 views
5

Ve reglas de base de datos/integridad referencial que se usan de manera que cambian datos reales en la base de datos (cambiar la fila w en la tabla x causa un cambio en la fila y en la tabla z)?Activadores de base de datos/integridad referencial y almacenamiento en memoria caché en memoria

En caso afirmativo, ¿cómo se relaciona esto con la creciente popularidad del almacenamiento en memoria caché en memoria (Memcache y amigos)? Después de todo, estas acciones ocurren dentro de la base de datos, pero el sistema de caché debe conocerlas para reflejar el estado correcto (o al menos invalidar el estado posiblemente modificado). Me resulta difícil creer que las devoluciones de llamada se implementen para tales casos.

¿Alguien tiene experiencia en el mundo real con una experiencia de instalación/en el mundo real con la consideración de una instalación de este tipo y su abandono (que manera fueron? Si el almacenamiento en caché, ¿cómo exigir integridad?)

Respuesta

5

respuesta simple:

  • integridad referencial es un debe tener
  • el almacenamiento en caché es una calificados deben tener
  • desencadenantes son un agradable tener

más larga respuesta

he estado desarrollando aplicaciones en las bases de datos relacionales desde 1993 (diciembre RDB ya que preguntas, y en sistemas de archivos planos antes de esa fecha) y los factores desencadenantes nunca han sido populares entre muchos desarrolladores porque pueden 'eliminar cosas que no desea eliminar'. La integridad referencial también suele ser desaprobada por los desarrolladores porque una base de datos en tercera forma normal con una integridad referencial adecuada es difícil de manipular en pocos minutos.

El almacenamiento en caché también se considera bastante "difícil" de hacer bien, aunque no estoy seguro de por qué.

Si bien muchos sistemas pueden vivir sin desencadenantes, yo diría que ninguna base de datos de aplicaciones puede sobrevivir cómodamente sin integridad referencial. Mire las etiquetas en esta pregunta, la base de datos detrás de este sitio tendrá una tabla para las etiquetas (probablemente llamada 'Etiqueta') y preguntas (probablemente llamada 'Pregunta'). 'Pregunta' tendrá una clave externa a la clave principal en la tabla de variables, pero a medida que las preguntas pueden tener muchas etiquetas y las etiquetas pueden tener muchas preguntas que supongo que la relación es la siguiente:

Question 
    (TagId)   1 | Database triggers/referential integrity and in-memory caching 
     | 
    ----- 
    | | | 
    QuestionTag 
(QuestionId)  1 | 1 ... 1 | 2 ... 1 | 3 ... 
    (TagId) 
    | | | 
    ----- 
     | 
    Tag   1 | database ... 2 | referential-integrity ... 3 | triggers ... 
    (TagId) 

Esta clase de integridad referencial es el fundamento de cualquier aplicación confiable y no es negociable. Puede ver cómo agrega credibilidad al diseño de la aplicación y la confianza en su longevidad.

El almacenamiento en memoria caché en SO puede activarse para etiquetas (aunque no está garantizado) así que suponga que las etiquetas están almacenadas en memoria caché y que tiene suficiente reputación para poder agregar una etiqueta a SO . Agregas tu etiqueta y es posible que persista en la base de datos de manera instantánea, pero ¿se actualiza la caché?

Lo que tiene es una solución de compromiso. ¿Puede el sitio sobrevivir sin saber sobre su nueva etiqueta? ¿Y si es así, por cuánto tiempo? Fundamentalmente, ¿cuál es el ciclo de vida de una etiqueta, a medida que pasa de ser agregada por un usuario a estar en la base de datos, disponible para otros usuarios, utilizada por otros usuarios?El caché se reconstruirá de acuerdo con las reglas establecidas por el equipo de desarrollo, y esa regla será esencialmente una compensación, por lo que cualquier etiqueta nueva estará disponible lo suficientemente rápido sin ralentizar la aplicación.

Los disparadores pueden forzar la integridad referencial, digamos que la etiqueta que agrega es "basura", pero para cuando los administradores la ven, tres preguntas son etiquetadas como "basura". Los administradores deciden eliminar la etiqueta 'basura', pero ¿qué pasa con las preguntas que están etiquetadas con ella? Si hay un desencadenante en la tabla 'etiqueta' que se activa en la eliminación, podría correr alrededor de la tabla 'pregunta' y eliminar todas las referencias a 'basura'. Hay muchas alternativas a este enfoque, muchas de las cuales son líneas de trabajo programáticas, pero ¿existe una alternativa más limpia?

He trabajado en muchos sitios en los últimos 20 años, los buenos usan integridad referencial y cada vez más el almacenamiento en caché. Los desencadenantes que cambian los datos de forma anónima (todos ellos fundamentalmente son procedimientos almacenados basados ​​en eventos) no son populares y cada vez se malinterpretan más, pero aún tienen un papel.

El almacenamiento en memoria caché y la integridad referencial no se pueden considerar como un juego de "o - o - el desarrollo" debe diseñar aplicaciones para que ambas puedan incorporarse.

+0

Guau, una respuesta bien pensada. Sin embargo, todavía no puedo entender cómo funcionan las soluciones de caché listas para usar con actualizaciones "entre bastidores". Cada cambio en las reglas de integridad referencial de la base de datos puede potencialmente crear un gran vacío en la solución de almacenamiento en caché. ¿Cómo se concilian estos requisitos (ser rápido - caché, ser consistente - hacer cumplir la integridad de ref.)? –

+0

El almacenamiento en caché de "listo para usar" es una cuestión de configuración, con los cambios en la base de datos agrupados y la memoria caché misma conociendo las restricciones de integridad referencial en la base de datos. Esto significa que incluso los datos en caché rechazarán los intentos de romper la integridad referencial. – amelvin

+0

¿De verdad? las soluciones de caché listas para usar saben sobre la integridad referencial? No pude encontrar ninguna referencia a esto en los populares sistemas de almacenamiento en caché. ¿Pueden dirigirme a uno que haga eso? –

Cuestiones relacionadas