Puede obtener alguna pista de esta pregunta que se hizo en el Centro de ayuda de Dropbox.
Dropbox: ¿Dropbox siempre carga / descarga todo el archivo cada vez que se realiza un cambio?
Antes de transferir un archivo, comparamos el nuevo archivo con la versión anterior y solo enviamos la parte del archivo que cambió. Esto se llama un “diferencial binario” y funciona en cualquier tipo de archivo. Dropbox comprime archivos (sin pérdida de datos o calidad) antes de transferirlos también. De esta manera, tampoco tendrá que preocuparse por Dropbox volver a cargar un archivo o perder ancho de banda.
- ¿Qué proveedor de servicios de alojamiento VPS proporciona un buen soporte?
- ¿Qué soluciones de almacenamiento en la nube en línea recomendaría para aproximadamente 500 TB?
- Si pongo todos mis archivos en un servicio de almacenamiento en la nube como Dropbox, ¿mi PC será más rápida?
- ¿Necesitamos un servidor / servicio en la nube dedicado para alojar nuestras aplicaciones en Apple Store?
- ¿Cuál es la parte más difícil de configurar una infraestructura en la nube de AWS? ¿Le parece que la formación de nubes es muy complicada de usar?
Para obtener una respuesta más completa, como no estoy trabajando en Dropbox, adivinaré lo que podría suceder, y con la eficacia de Dropbox, puedo apostar a que está muy cerca de lo que hacen.
Primero, pensemos en lo que sucede después de agregar cualquier archivo a Dropbox: se calcula un valor hash a partir del contenido del archivo y se almacena en su computadora (así como en Dropbox). Luego, cuando agrega otro archivo, Dropbox buscará los archivos con el mismo valor hash y, si encuentra uno, los comparará. Finalmente, si la comparación resulta en la igualdad de los archivos, el nuevo archivo no se cargará en absoluto, y solo se cargarán algunos metadatos (que dicen que el archivo recién creado X es igual a un archivo existente Y).
Además, no importa que Dropbox sepa si se cambió el nombre del archivo o si se creó un nuevo archivo. En realidad, cuando cambia el nombre de un archivo, puede pensar que se mueve el archivo, lo que puede suponer que copia el archivo al nuevo lugar y elimina la copia original.
Luego, lo que sucede en el primer paso de cambiar el nombre del archivo (que es copiar el archivo al nuevo lugar), Dropbox descubriría que la nueva copia es igual a la copia original y solo crearía un puntero a la copia original. Después de eso, cuando se elimina la copia original, solo se elimina su puntero de los datos, pero la nueva copia todavía tiene un puntero a los mismos datos. En consecuencia, cambiar el nombre del archivo X a Y solo daría como resultado la transferencia de dos registros de metadatos:
- Se crea un nuevo archivo llamado X que apunta a dataOf (Y)
- El archivo llamado Y se elimina (y no elimine el contenido, ya que X todavía lo señala)
Ahora que sabe sobre el mecanismo de cambio de nombre de archivo, volvamos al caso más general de lo que sucede cuando crea varias copias de un archivo y realiza un cambio en ellas. Es decir, se vuelve más interesante y crear un gráfico de versiones puede ser útil.
Continuemos con este escenario en el que tenemos un archivo llamado X en el cuadro desplegable. [El archivo X se transferirá al sitio web de Dropbox con sus metadatos sobre el nombre, la ruta, etc. Se crea un nodo llamado XData en el gráfico del archivo y X apunta hacia él].
Luego, copiamos X y lo nombramos Y [El archivo Y es igual a X, por lo que solo se comunican estos metadatos y en el gráfico del archivo, Y apuntará a XData].
Después de eso, copiamos X nuevamente y lo nombramos Z [El archivo Z es igual a X, por lo que solo se comunican estos metadatos y en el gráfico del archivo, Z apuntará a XData].
En este momento, el esquema se ve así:
Luego, cambia una línea en el archivo Y. El cambio se detectaría usando “diff binario” y solo se comunicaría el cambio:
Y luego, suponiendo que cambie las mismas líneas en Z, Dropbox determinará su igualdad con Y utilizando el mecanismo de hash que describí anteriormente en el gráfico y se convertiría en:
Este fue un ejemplo simplificado que no consideró el historial de versiones, ya que es sencillo y solo agrega algunas complejidades y detalles innecesarios.