JSPaste / Backend

JSPaste Backend (API)
European Union Public License 1.2
4 stars 1 forks source link

Garbage Collector-like document deleter #83

Open tnfAngel opened 5 months ago

tnfAngel commented 5 months ago

Bien, hay un problema y es que los documentos expirables solo se borran bajo demanda, en concreto cuando un usuario intenta acceder a ellos, entonces yo proponía dos métodos para ahorrar un poco de espacio

Escanear e iterar sobre cada documento y eliminar asincronasmente y preferiblemente secuencialmente para aliviar un poco las cargas cada documento que ya haya expirado, esto ejecutarlo cada cierto tiempo

parecido al método simple, pero esa vez intentando eliminar un poco las iteraciones y lecturas innecesariarias cacheado las claves y expiraciones en forma de tupla y metiéndolos en un Array a los documentos que están próximos a expirar, por ejemplo < 1h.

en los dos métodos (sobre todo el primero) existen iteraciones y lecturas innecesariarias, por ejemplo los documentos permanentes nunca cumpliría las condiciones, también se puede mitigar aún más separando las carpetas, por ejemplo una para documentos permanentes y otra para temporales, pero habría que cambiar las apis de lectura, escritura, modificación, etc así que no se si merece la pena

Que sugerencias tenéis o como veis esto vosotros @JSPaste/developers

inetol commented 5 months ago

El problema actual y por lo que no he sacado el tema es que ahora mismo la estructura de los documentos impide hacer esto eficientemente, hay que descomprimir y leer el campo para verificar si el documento sigue válido o no y puede llegar a ser costoso de CPU esto es el primer problema.

El segundo es el que estás comentando, iterar todos los documentos constantemente (en caso del método simple) es ineficiente y añade una carga de E/S constante. Esto ya se puede remediar mediante una base de datos y almacenar los metadatos del documento, si no se quiere picar la cabeza SQLite debería ser suficiente, aunque preferiría primero remediar y establecer una estructura firme para los documentos antes de meterme de lleno con esto.

Mrgaton commented 5 months ago

El problema actual y por lo que no he sacado el tema es que ahora mismo la estructura de los documentos impide hacer esto eficientemente, hay que descomprimir y leer el campo para verificar si el documento sigue válido o no y puede llegar a ser costoso de CPU esto es el primer problema.

El segundo es el que estás comentando, iterar todos los documentos constantemente (en caso del método simple) es ineficiente y añade una carga de E/S constante. Esto ya se puede remediar mediante una base de datos y almacenar los metadatos del documento, si no se quiere picar la cabeza SQLite debería ser suficiente, aunque preferiría primero remediar y establecer una estructura firme para los documentos antes de meterme de lleno con esto.

Si, lo de la base de datos aparte lo veo buena idea

tnfAngel commented 5 months ago

El problema actual y por lo que no he sacado el tema es que ahora mismo la estructura de los documentos impide hacer esto eficientemente, hay que descomprimir y leer el campo para verificar si el documento sigue válido o no y puede llegar a ser costoso de CPU esto es el primer problema.

El segundo es el que estás comentando, iterar todos los documentos constantemente (en caso del método simple) es ineficiente y añade una carga de E/S constante. Esto ya se puede remediar mediante una base de datos y almacenar los metadatos del documento, si no se quiere picar la cabeza SQLite debería ser suficiente, aunque preferiría primero remediar y establecer una estructura firme para los documentos antes de meterme de lleno con esto.

ya, ese también es un gran problema

inetol commented 4 months ago

Ahora que ya ha quedado liquidado el problema de los documentos ambas opciones serían factibles, pero solo la segunda sería para futuro.

Podríamos mover todas las cabeceras a la base de datos y mantener el documento exclusivamente para los datos, esto mejoraría enormemente el rendimiento porque solo se tendrían que hacer consultas para validar el documento. Las operaciones en disco pueden llegar a ser caras y si en un futuro se quiere añadir otra forma de almacenamiento remoto se podrá implementar fácilmente.

Mrgaton commented 4 months ago

Entonces se hará una base de datos separada

inetol commented 2 weeks ago

La implementación básica de la base de datos ha empezado en este PR #163