¿El repositorio SVN es mucho más grande que el archivo de volcado?

Me han puesto a cargo de migrar nuestra instalación de SVN de la versión 1.5.6 a la 1.7.6. Como parte de eso, hice un ciclo de volcado/carga de nuestros dos repositorios y noté algo extraño.

Uno de los repositorios se "descarga" en un archivo de 2 GB, pero después de cargarlo, ocupa casi 23 GB de espacio en disco. Esto también fue un problema en 1.5.6, pero esperábamos que la actualización pudiera ayudar con eso.

El repositorio en cuestión es un poco "extraño" porque contiene una sola carpeta con 7500 archivos (solía haber hasta 12000) y una subcarpeta con otros 500 o más archivos, y eso es todo.

Parece que puede estar relacionado con este problema: El repositorio SVN de 350 GB crea al menos 1 MB de revisión incluso para una tarea más simple como una rama / etiqueta

No sé qué podemos hacer al respecto en este momento, pero el repositorio actualmente está creciendo a un ritmo ridículo y tendremos que reubicarlo si no lo solucionamos. Una tarea que esperaba evitar.

preguntado el 08 de septiembre de 12 a las 09:09

1 Respuestas

Primero, SVN tiene dos diferentes backends del repositorio: BDB (Berkley DB) y FSFS (Sistema de archivos). La forma en que existe el repositorio en el disco depende de esta elección, y la BDB suele ser un poco más grande. ¿Cuál usas?

Si usa FSFS, entonces debe leer sobre sharding: cuando confirma un cambio, por pequeño que sea, se confirmará en un archivo cuyo tamaño mínimo lo establezca el disco, normalmente de 2 kb a 16 kb. Ahora multiplique eso por la cantidad de archivos que se están confirmando, y puede obtener números muy grandes. La buena noticia es que puede ejecutar un comando para condensar los fragmentos en un solo archivo:

svnadmin pack /path/to/repository

Esto podría mejorar en gran medida el tamaño del disco.

O el problema del espacio podría ser el problema del número masivo de archivos por confirmación que mencionas.

En cualquier caso, pregunta por qué el archivo de volcado es mucho más pequeño que el tamaño del repositorio. El archivo de volcado es un solo archivo en un formato que esencialmente es cada compromiso realizado en el repositorio; esta es una forma muy concisa del repositorio (especialmente si se usa --deltas). Dado que esto se coloca en un solo archivo, se evita el problema de la fragmentación.

Solía ​​​​usar y defender SVN en una organización anterior. Recientemente me mudé a Mercurial DVCS (también llamado Hg, y es similar a Git). Una vez que haya hecho el cambio, es difícil pensar en volver atrás. De todos modos, aquí hay una cita de Softpedia sobre el tamaño del repositorio:

Espacio en disco: cuando el proyecto de Mozilla se transfirió de SVN a Mercurial (muy similar a Git en rendimiento), el uso de espacio en disco se redujo de 12 GB a 420 MB, 30 veces más pequeño que el tamaño original. Se supone que Git usa los mismos algoritmos de almacenamiento, por lo que el tamaño del archivo debe tener el mismo valor.

Es posible que desee investigar qué sucedería en su caso si cambiara a Hg o Git. Si es tan dramático como el ejemplo de Softpedia, podría recomendar Hg/Git a su gerencia.

Respondido el 13 de Septiembre de 12 a las 08:09

Voy a intentar ejecutar un comando de paquete en el test-repo y les dejaré saber cómo me fue. - Grubsnik

¿Cómo te va? El hecho de que esté intentando esto implica que está usando FSFS, ¿es así? - andres alcock

De hecho lo es, lamentablemente el comando pack no logró los resultados deseados. - Grubsnik

¿Cuál es el tamaño del disco en el servidor original? - andres alcock

Igual que antes de la mudanza, ~23 GB. Cargarlo en un repositorio 1.7 en realidad agregó alrededor de 50 megas al tamaño total. - Grubsnik

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.