-
Notifications
You must be signed in to change notification settings - Fork 1
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
Comments
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 |
ya, ese también es un gran problema |
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. |
Entonces se hará una base de datos separada |
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
The text was updated successfully, but these errors were encountered: