Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Garbage Collector-like document deleter #83

Open
tnfAngel opened this issue Apr 12, 2024 · 6 comments
Open

Garbage Collector-like document deleter #83

tnfAngel opened this issue Apr 12, 2024 · 6 comments

Comments

@tnfAngel
Copy link
Member

tnfAngel commented Apr 12, 2024

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

  • método simple

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

  • método 2

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
Copy link
Contributor

inetol commented Apr 12, 2024

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
Copy link
Member

Mrgaton commented Apr 12, 2024

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
Copy link
Member Author

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
Copy link
Contributor

inetol commented Apr 30, 2024

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
Copy link
Member

Mrgaton commented Apr 30, 2024

Entonces se hará una base de datos separada

@inetol
Copy link
Contributor

inetol commented Aug 26, 2024

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

La implementación base se está haciendo en este PR #189

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants