data-structures time calendar performance high-volume

data structures - Estructura de datos de calendario de tiempo



data-structures time (2)

@ Radu094 te ha señalado una buena fuente de información, pero será complicado procesarla.

En un nivel terriblemente pragmático, ¿ha considerado grabar las citas y la información disponible en una sola tabla, en lugar de en dos tablas? Para cada día, divida el tiempo en "nunca disponible" (antes de que se abra la oficina, después de que se cierre la oficina, si tal cosa sucede), "disponible: puede asignarse" y "no disponible". Estas (dos o) tres clases de reservas se registrarán en intervalos contiguos (con el tiempo de inicio y finalización para cada intervalo en un solo registro).

Para cada habitación y cada fecha, es necesario crear un conjunto de reservas ''no en uso'' (dependiendo de si elige ''nunca disponible'', el conjunto podría ser un registro ''disponible'' o podría incluir el turno temprano y los registros de los últimos turnos ''nunca disponibles'' también).

Entonces debes resolver qué preguntas estás haciendo. Por ejemplo:

  • ¿Puedo reservar la Habitación X el Día Y entre T1 y T2?
  • ¿Hay alguna habitación disponible en el Día Y entre T1 y T2?
  • ¿En qué momentos del Día Y está disponible la Habitación X?
  • ¿En qué momentos del Día Y hay disponible una sala con capacidades audiovisuales y capacidad para 12 personas?
  • ¿Quién ha reservado la Habitación X durante la mañana del Día Y?

Esto es solo un pequeño subconjunto de las posibilidades. Pero con cierto cuidado y atención al detalle, las consultas se vuelven manejables. Validar las restricciones en el DBMS será más difícil. Es decir, asegurando que si el tiempo [T1..T2) está reservado, entonces nadie más reserva [T1 + 00: 01..T2-00: 01) o cualquier otro período superpuesto. Vea Allen''s Interval Algebra en Wikipedia y otros lugares (incluido este en uci.edu ).

Estamos buscando la actualización (reescritura) de nuestro sistema, que almacena información sobre cuándo las personas pueden reservar habitaciones, etc. durante el día. Ahora mismo almacenamos el inicio y la hora y la fecha en que la sala está disponible en una tabla, y en otra almacenamos las horas de las citas individuales.

En la superficie, parecía una idea lógica almacenar la información de esta manera, pero a medida que pasaba el tiempo y el sistema sufría una gran carga, comenzamos a darnos cuenta de que esta estructura de datos parece ser ineficiente. (Se convierte en una operación intensiva para buscar las horas disponibles en todas las habitaciones y calcular cuándo están disponibles las habitaciones. Si la sala está disponible durante un tiempo determinado, es el tiempo que está disponible el tiempo suficiente para acomodar el tiempo solicitado).

Hemos dado vueltas en círculos sobre cómo hacer que el sistema sea más eficiente, y creemos que tiene que haber una mejor manera de abordarlo. ¿Alguien tiene sugerencias sobre cómo hacer esto o tiene algún lugar donde buscar información sobre cómo construir algo como esto?