Saltar al contenido principal
2026-09-21SubsonicLínea base de rendimientoPureStream

Pruebas de rendimiento del servidor Subsonic de PureStream: 69 µs en enumeración principal para 500.000 pistas

PureStream midió el rendimiento de las rutas de lectura del servidor Subsonic en una colección de 500.000 pistas: la enumeración principal responde en 69 microsegundos, la paginación profunda en el offset 250k tarda 25 milisegundos y la consulta por género requiere 113 microsegundos. El estudio aísla y cuantifica además la carga computacional en deduplicación de artistas y agregaciones de género.

Pruebas de rendimiento del servidor Subsonic de PureStream: 69 µs en enumeración principal para 500.000 pistas

Los servidores de streaming de música autohospedados suelen experimentar aumentos no lineales de latencia durante paginaciones profundas y agregaciones complejas en colecciones masivas. Para documentar el comportamiento operativo real, evaluamos los tiempos de respuesta en las rutas de lectura Subsonic de PureStream mediante un conjunto de datos de prueba con 500.000 pistas.

Alcance de la prueba y construcción del catálogo

Las bibliotecas personales de coleccionistas alcanzan con frecuencia cientos de miles de pistas. Los puntos de entrada más utilizados en el protocolo Subsonic (enumeración search3, exploración con getMusicDirectory y listados de álbumes en getAlbumList2) muestran patrones de coste variables según el volumen de datos. Ciertas rutas aprovechan índices de cobertura, mientras que otras requieren deduplicación en la tabla completa. En esta fase se completaron las siguientes tareas:

  • [x] Generación de un catálogo de prueba de 500.000 registros (~42.000 álbumes, 2.000 artistas y 100 géneros) mediante el flujo habitual de migraciones, creando una base SQLite idéntica a producción
  • [x] Incorporación de un índice de cobertura para consultas por género y registro en la validación de esquemas para evitar desajustes
  • [x] Registro de métricas P50 y P95 en 14 rutas de lectura clave para establecer una línea base de rendimiento

Métricas de las principales rutas de lectura

Punto de entrada 100k 500k Evaluación
search3 enumeración principal 53µs 69µs Estable
search3 página profunda (offset=250k) — 25ms Estable
getMusicDirectory página única 1.3ms 1.4ms Estable
getAlbumList2 tres modos de paginación 8–82ms 86–333µs Estable
getSongsByGenre no medido 113µs Índice efectivo
FTS búsqueda de texto 24.8ms 137ms Crecimiento lineal
getArtists deduplicación 3.4ms 543ms Carga de agregación
getGenres agregación no medido 600ms Dentro de límites
Directorio individual extenso (página profunda) — 734ms Caso de borde

Observaciones principales:

  • Enumeración principal (69 µs): La consulta estándar de search3 se mantiene en el rango de microsegundos con 500.000 filas gracias a un índice de cobertura parcial sobre registros válidos, protegiendo las lecturas de los escaneos concurrentes en disco.
  • Paginación profunda (25 ms): Obtener una página con un desplazamiento de 250.000 pistas requiere 25 milisegundos, preservando una navegación ágil en milisegundos.
  • Filtrado por género (113 µs): El nuevo índice transforma el plan de ejecución de un escaneo completo a una búsqueda indexada, reduciendo de forma sustancial el tiempo de proceso.

Análisis de puntos de alta demanda de cálculo

Las mediciones identificaron dos escenarios de agregación con mayor consumo computacional:

  • getArtists deduplicación (543 ms): La unión de artistas principales y participantes exige un recorrido completo de la tabla. Con 500.000 pistas, el tiempo se mantiene por debajo de un segundo y permanece en monitorización activa.
  • getGenres agregación (600 ms): El recuento de álbumes únicos mediante COUNT(DISTINCT album) requiere unos 600 milisegundos en la escala de 500.000 pistas.

Entregables de la iteración

  • [x] Línea base completa de rendimiento P50/P95 para 14 puntos de lectura en 500.000 pistas
  • [x] Despliegue del índice de lectura para géneros con validación de esquemas y pruebas de planes de ejecución
  • [x] Cuantificación de los puntos de esfuerzo en consultas de agregación para orientar mejoras posteriores

Próximos pasos

  • [ ] Optimización de paginación: Implementación de navegación por cursores en endpoints sin parámetro de offset
  • [ ] Consolidación de consultas de autenticación de sesión en streaming continuo