2009-04-28 8 views
44

Estaba leyendo sobre bases de datos temporales y parece que han incorporado aspectos de tiempo. Me pregunto por qué necesitaríamos un modelo así.¿Por qué necesitamos una base de datos temporal?

¿Qué tan diferente es de un RDBMS normal? ¿No podemos tener una base de datos normal, es decir, RDBMS y, por ejemplo, tener un activador que asocie una marca de tiempo con cada transacción que ocurra? Puede haber un golpe de rendimiento. Pero todavía soy escéptico sobre las bases de datos temporales que tienen un caso fuerte en el mercado.

¿Alguna de las bases de datos actuales es compatible con esta característica?

Respuesta

14

Una base de datos temporal almacena de manera eficiente una serie temporal de datos, normalmente al tener una escala de tiempo fija (como segundos o incluso milisegundos) y luego almacenar solo los cambios en los datos medidos. Una marca de tiempo en un RDBMS es un valor almacenado discretamente para cada medición, que es muy ineficiente. Una base de datos temporal a menudo se usa en aplicaciones de monitoreo en tiempo real como SCADA. Un sistema bien establecido es la base de datos PI de OSISoft (http://www.osisoft.com/).

+12

Pi utiliza un algoritmo de compuerta oscilante, y debe considerarse una base de datos de compresión, no una base de datos temporal. Las bases de datos temporales conservan la capacidad de ver los datos tal como se veían en el pasado, a la vez que permiten la capacidad de actualizar incluso el pasado en el futuro. Esta disociación de tiempo válido y hora actual no existe en Pi. Pi muestra un valor pasado que no es estadísticamente diferente del valor real, una base de datos temporal le mostrará el valor real en ese momento, como se vio en ese momento, y el valor real en ese momento, como se conoce ahora (2 consultas diferentes)) –

+0

@EdwinBuck - esto suena autoritario, pero no cita ninguna fuente. – codekaizen

+1

Era integrador/herrero de herramientas para el sistema RARA SCADA, que tenía varios nombres, y fue vendido por Ferranti Systems, Elsag, Elsag/Bailey, Bailey Network Management, ABB Network Management y ahora solo ABB. Actualmente se vende bajo el nombre "Network Manager" a menos que lo hayan cambiado nuevamente. Escribí los ayudantes de instalación de Pi para esa plataforma, y ​​di entrenamiento en el uso de Pi Historian, e instalé Pi (y un montón de otro software) en numerosas salas eléctricas de control SCADA. En el breve lapso de personajes, es difícil entrar en detalles. –

1

Mi comprensión de las bases de datos temporales se basa en el almacenamiento de ciertos tipos de información temporal. Puede simular eso con un RDBMS estándar, pero al usar una base de datos que lo soporte tiene modismos incorporados para muchos conceptos y el lenguaje de consulta podría optimizarse para este tipo de consultas.

Para mí esto es un poco como trabajar con una base de datos específica de GIS en lugar de un RDBMS. Si bien puede insertar coordenadas en un RDBMS común, tener las representaciones apropiadas (por ejemplo, a través de archivos de cuadrícula) puede ser más rápido, y tener primitivas de SQL para cosas como la topología es útil.

Hay bases de datos académicas y algunas comerciales. Timecenter tiene algunos enlaces.

2

Además de leer Wikipedia article? Una base de datos que mantiene un "registro de auditoría" o un registro de transacciones similar tendrá algunas propiedades de ser "temporal". Si necesita respuestas a preguntas sobre quién hizo qué a quién y cuándo, entonces tiene un buen candidato para una base de datos temporal.

2

Puede imaginar una base de datos temporal simple que simplemente registra su ubicación de GPS cada pocos segundos. Las oportunidades para comprimir estos datos son excelentes, una base de datos normal que necesitaría para almacenar una marca de tiempo para cada fila. Si se requiere una gran cantidad de rendimiento, saber que los datos son temporales y que las actualizaciones y eliminaciones en una fila nunca serán necesarias permite que el programa elimine gran parte de la complejidad heredada en un RDBMS típico.

A pesar de esto, los datos temporales normalmente solo se almacenan en un RDBMS normal. PostgreSQL, por ejemplo, tiene algunos temporal extensions, lo que hace esto un poco más fácil.

9

Según tengo entendido (y sobre simplificando enormemente), una base de datos temporal registra datos sobre cuándo los datos eran válidos, así como los datos en sí, y le permite consultar sobre los aspectos temporales. Terminas lidiando con tablas de "tiempo válido" y "tiempo de transacción", o "tablas bitemporales" que involucran aspectos de "tiempo válido" y "tiempo de transacción". Usted debe considerar la lectura de cualquiera de estos dos libros:

+6

Richard T. Snodgrass ahora está regalando el libro de forma gratuita http://www.cs.arizona.edu/people/rts/tdbbook.pdf –

+1

@AlexanderN: Es cierto, pero la URL que cité muestra una página que muestra de manera prominente el libro (y CD-ROM, y 'errata' para pp30-31) así como otros materiales que pueden ser de interés. –

1

Otro ejemplo de donde una base de datos temporal es útil es cuando los datos cambian con el tiempo. Pasé unos años trabajando para un minorista de electricidad donde almacenamos lecturas de medidores durante bloques de tiempo de 30 minutos. Esas lecturas del medidor podrían ser revisadas en cualquier momento, pero aún así necesitamos poder mirar hacia atrás en el historial de cambios para las lecturas.

Por lo tanto, teníamos la última lectura (nuestra 'comprensión actual' del consumo durante los 30 minutos) pero podíamos recordar nuestra comprensión histórica del consumo. Cuando tiene datos que se pueden ajustar de tal manera, las bases de datos temporales funcionan bien.

(Habiendo dicho esto, se talladas a mano en SQL, pero fue un justo tiempo atrás no tendría esa decisión en estos días..)

2

Dos razones vienen a la mente:

  1. algunos están optimizados para inserción y de sólo lectura y puede ofrecer mejoras dramáticas Potencia
  2. algunos tienen una mejor comprensión de tiempo que SQL tradicional - lo que permite agrupar las operaciones por segundo, minuto, hora, etc.
62

Considere su cita/agenda diaria: va desde el 1 de enero hasta el 31 de diciembre. Ahora podemos consultar el diario para citas/entradas de diario en cualquier día. Este pedido se llama tiempo válido. Sin embargo, las citas/entradas generalmente no se insertan en orden.

Supongamos que me gustaría saber qué citas/entradas había en mi agenda el 4 de abril. Es decir, todos los registros que existieron en mi diario el 4 de abril. Este es el tiempo de transacción .

Dado que las citas/entradas se pueden crear y borrar etc. Un registro típico tiene un tiempo válido de inicio y final que cubre el período de la entrada y un tiempo de transacción de inicio y final que indica el período durante el cual el diario.

Esta disposición es necesaria cuando el diario puede someterse a la revisión histórica . Supongamos que el 5 de abril me doy cuenta de que la cita que tuve el 14 de febrero ocurrió en realidad el 12 de febrero, es decir, descubrí un error en mi diario. Puedo corregir el error para corregir la imagen temporal válida, pero ahora mi consulta de lo que era en el diario del 4 de abril sería incorrecto, A MENOS QUE los tiempos de transacción para las citas/entradas también estén almacenados. En ese caso, si consulto mi agenda a partir del 4 de abril, se mostrará una cita el 14 de febrero, pero si realizo una consulta a partir del 6 de abril, aparecerá una cita el 12 de febrero.

Esta función de desplazamiento en el tiempo de una base de datos temporal permite registrar información sobre cómo se corrigen los errores en una base de datos. Esto es necesario para una verdadera imagen de auditoría de los datos que registra cuándo se realizaron las revisiones y permite consultas relacionadas con cómo se han revisado los datos durante el tiempo .

La mayor parte de la información comercial debe almacenarse en este esquema bitemporal para proporcionar un verdadero registro de auditoría y maximizar la inteligencia de negocios, de ahí la necesidad de soporte en una base de datos relacional. Observe que cada elemento de datos ocupa un cuadrado (posiblemente ilimitado) en el modelo de tiempo bidimensional, por lo que las personas a menudo usan un índice GIST para implementar la indexación bitemporal.El problema aquí es que un índice GIST está realmente diseñado para datos geográficos y los requisitos para los datos temporales son algo diferentes.

Las restricciones de exclusión de PostgreSQL 9.0 deberían proporcionar nuevas formas de organizar los datos temporales, p. Los PERIODOS de transacción y tiempo válido no deben superponerse para la misma tupla.

+0

La sugerencia de índice de tipo GIST es muy perspicaz –

6

Las bases de datos temporales a menudo se usan en la industria de servicios financieros. Una razón es que raramente (o nunca) se le permite borrar cualquier información, por lo que ValidFrom - ValidTo type fields on records se usa para proporcionar una indicación de cuándo un registro fue correcto.

+2

¿Existe alguna db temporal comercial específica que sea popular en los servicios financieros? – user77115

+0

Sé por experiencia que los sistemas bitemporales instalados en Goldman Sachs (SecDB), JP Morgan (Athena) y Bank of America (Quartz) se construyeron sobre una base de datos orientada a objetos personalizada. Athena y Quartz (construido por el mismo equipo) usaron un modelo bitemporal bastante elegante, pero no se ajusta directamente a un paradigma relacional. –

2

Apenas una actualización, la base de datos temporal está llegando a SQL Server 2016.

Para despejar todas sus dudas por qué uno necesita una base de datos temporal, en lugar de configurar con métodos personalizados, y la eficiencia con la perfección & SQL Server configura para usted, comprueba la demostración de vídeo y en profundidad sobre Channel9.msdn aquí: https://channel9.msdn.com/Shows/Data-Exposed/Temporal-in-SQL-Server-2016

enlace de MSDN: https://msdn.microsoft.com/en-us/library/dn935015(v=sql.130).aspx

la actualidad con el CTP2 (beta 2) lanzamiento de SQL Server 2016 se puede jugar con él.

Comprobar this video sobre cómo usar las tablas temporales en SQL Server 2016.

2

Además de "qué cosas nuevas puedo hacer con ella", podría ser útil tener en cuenta "qué cosas edad tiene que unificar?". La base de datos temporal representa una generalización particular de la base de datos SQL "normal". Como tal, puede brindarle una solución unificada a problemas que anteriormente parecían no estar relacionados. Por ejemplo:

  • concurrencia Web Cuando su base de datos tiene una interfaz web que permite a varios usuarios realizan norma Crear/Eliminar modificaciones/actualización (CRUD), lo que tiene que hacer frente a la concurrent web changes problem. Básicamente, debe verificar que una modificación de datos entrantes no afecte a ningún registro que haya cambiado desde que ese usuario vio por última vez esos registros. Pero si tiene una base de datos temporal, es muy posible que ya asocie algo así como una "Id. De revisión" con cada registro (debido a la dificultad de hacer marcas de tiempo únicas y monótonamente ascendentes). Si es así, entonces eso se convierte en el mecanismo natural, "ya integrado" para evitar la destrucción de los datos de otros usuarios durante las actualizaciones de la base de datos.
  • Registros legales/fiscales El sistema legal (incluidos los impuestos) pone bastante más énfasis en los datos históricos que la mayoría de los programadores. Por lo tanto, a menudo encontrará advice sobre esquemas de facturas que advierten que tenga cuidado con eliminar registros o normalizar de forma natural, lo que puede llevar a la incapacidad de responder preguntas legales básicas como "Olvídese de su dirección actual, qué dirección hizo ¿Enviaste esta factura en 2001? Con una base de marco temporal, todas las maquinaciones para esos problemas (generalmente están a medio camino de tener una base de datos temporal) desaparecen. Simplemente use el esquema más natural y elimínelo cuando tenga sentido, sabiendo que siempre puede regresar y responder preguntas históricas con precisión.

Por otro lado, el modelo temporal en sí está a mitad de camino para completar el control de revisión, lo que podría inspirar más aplicaciones. Por ejemplo, supongamos que despliega su propia instalación temporal sobre SQL y permite la bifurcación, como en los sistemas de control de revisiones. Incluso una ramificación limitada podría facilitar la oferta de "sandboxing", la capacidad de jugar y modificar la base de datos con abandono sin causar ningún cambio visible a otros usuarios. Eso facilita el suministro de capacitación de usuario altamente realista en una base de datos compleja.

La bifurcación simple con una facilidad de fusión simple también podría simplificar algunos problemas de flujo de trabajo comunes. Por ejemplo, una organización sin fines de lucro podría tener voluntarios o trabajadores mal pagados que ingresen datos. Darle a cada trabajador su propia sucursal podría facilitar la tarea de un supervisor para revisar su trabajo o mejorarlo (por ejemplo, desduplicación) antes de fusionarlo en la rama principal donde sería visible para los usuarios "normales". Las sucursales también pueden simplificar los permisos. Si a un usuario solo se le otorga permiso para usar/ver su única sucursal, no tiene que preocuparse por evitar cualquier posible modificación no deseada; solo fusionarás los cambios que tengan sentido de todos modos.

Cuestiones relacionadas