Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

178
Views
Actualizar datos incrustados en la actualización de datos referenciados

Estoy creando una aplicación Meteor y actualmente estoy creando las publicaciones y enfrentándome a lo que parece ser un dilema de diseño común en torno a documentos relacionados versus incrustados. Mi modelo de datos (simplificado) tiene Bookings , cada una de las cuales tiene un Client relacionado y un Service relacionado. Para optimizar la velocidad de recuperación de una colección, incorporo los campos clave de un Client y un Service en la Booking , y también los vinculo a la ID: mi modelo de Reserva tiene la siguiente estructura:

 export interface Booking extends CollectionObject { client_name: string; service_name: string; client_id: string; service_id: string; bookingDate: Date; duration: number; price: number; }

En este modelo, client_id y service_id son referencias a los documentos vinculados y client_name / service_name están incrustados, ya que se utilizan al mostrar una lista de reservas.

Todo esto me parece bien, sin embargo, la parte que falta del rompecabezas es mantener estos datos incrustados actualizados. Si un usuario en una parte separada del sistema actualiza un servicio (que sería una colección reactiva), entonces necesito esto para activar una actualización de service_name para cualquier reserva con la ID de servicio correspondiente. ¿Hay algún evento al que deba suscribirme para esto o puedo hacerlo? Del lado del cliente, tengo un formulario que le permite al usuario agregar/editar un Servicio que simplemente usa el método de inserción o actualización en la colección MongoObservable: la parte de OOP de mí siente que esto debe anularse en el código del servidor para luego actualizar también los datos relacionados o estoy haciendo esto completamente de manera incorrecta?

¿Es todo esto irrelevante y debería usar https://atmospherejs.com/reywood/publish-composite y devolver colecciones de documentos relacionados (parece que dañaría el rendimiento en un entorno de producción al devolver varios cientos de reservas a la vez)

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Uso mucho el concepto de "clave externa" como lo describe, y desnormalizo los datos en toda la recopilación como lo está haciendo con el nombre del servicio. Hago esto explícitamente para evitar búsquedas/publicaciones adicionales.

utilizo 2 estrategias para mantener las cosas al día. el primero se realiza cuando se guardan los datos de origen, por ejemplo, en una llamada al método Meteor. Actualizaré los datos desnormalizados en el acto, tocando la(s) otra(s) colección(es). haría todo esto en un escenario de "lectura alta, escritura baja".

la otra estrategia es usar ganchos de colección para disparar cuando se actualiza la colección de origen. uso este paquete: matb33: collection-hooks

conceptualmente es similar al primero, pero el gancho para saber cuándo hacerlo es diferente.

un ejemplo que estamos usando en la aplicación actual en la que estoy trabajando: tenemos una fuente de noticias con comentarios. las noticias y los comentarios están en colecciones separadas, y cada registro de la colección de comentarios tiene la identificación de la noticia asociada.

mantenemos un recuento continuo de comentarios asociado con la noticia en sí. cada vez que se agrega o elimina un comentario, incrementamos/reducimos el conteo y actualizamos la noticia de inmediato.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!