La base de las huellas digitales y fotos de Chile ( para 20M de personas ) 
pesaba en el 2008 9 Teras.

Y estoy hablando de 13 huellas para los dedos, foto de tu firma y foto de la 
cara de la persona. ( sí hay personas con 12 dedos ). ( como se esto ?, era el 
DBA del Registro Civil de Chile entre el 2005 y el 2008 ). 

Si quieres saber el tamaño de tu base de datos.

SELECT relname, relpages FROM pg_class ORDER BY relpages DESC limit 1;
SELECT pg_size_pretty(pg_database_size('geekdb'));

Hay varias funciones para saber el peso de algunos objetos. 
https://www.postgresql.org/docs/9.1/static/functions-admin.html 
<https://www.postgresql.org/docs/9.1/static/functions-admin.html>

Espero esto te sirva.

> On 5/08/2017, at 7:33 AM, jvenegasperu . <jvenegasp...@gmail.com> wrote:
> 
> Hola Diego
> 
> Se me ocurre que hagas lo siguiente:
> 
> hazte una tabla digamos con 1000 registros extrayendolos de la tabla de 1.5 Tb
> 
> luego miras cuanto pesa esta tabla de 1000 registros
> 
> con eso te haces una idea de cuanto pesa cada registro de tu BD.
> 
> luego mide y pesa unas cuantas imagens para que tengas una idea de las 
> medidas y pesos de las fotos
> 
> Con esos datos a esa tabla de prueba con 1000 registros resultante aplicale 
> el script anterior que te pase ajustandole las dimensiones
> 
> aplicas el script a la tabla dandole las medidas que te servirian y le haces 
> vacuum para que actualice las estadisticas
> 
> y nuevamente pasas la consulta para el tamaño asi tendras una idea de cuanto 
> puedes reducir las imagenes. en tu tabla real de 1.5 Tb
> 
> PD: Esto te serviria si por ejemplo la alta resolucion de las imagenes no es 
> necesaria una vez un medico me dijo que necesitaba las fotos con 20 
> Megapixels para poder notar un minusculo cambio de color que representaba una 
> infección.
> 
> Ahora tu hablas de unas 2000 fotos y 5000Gb por dia eso da 2.5 Mb por foto y 
> es una barbaridad si te estoy entendiendo bien y se trata de fotos de cedulas 
> para identificacion o DNI como le llamamos aqui en Peru yo diria que con 
> 100Kb es ya una exageracion mira ahi te adjunto mi foto que uso para la 
> cedula y solo pesa 15Kb jeje
> 
> Estoy imaginando que se trata de un fotografo que tomas las fotos para la 
> cedula con una super camara asi pueden retocar la foto y hasta ponerte terno 
> jajaja como mi foto.
> 
> O quizas como es postgres 8.3 ya son como 10 años y antes cargaban las fotos 
> con scaneres y esas fotos pesaban una barbaridad quiza solo baste ajustando 
> las imagenes de años pasados para bajar el peso de tu BD a la quinta parte y 
> hasta menos porque quien sabe y por ahi alguien uso en años pasados fotos en 
> formato BMP que pesan un monton y por nada porque incluso solo cambiando el 
> formato sin cambiar tamaño ya ganas muchisimo espacio eso me lleva a pensar 
> que quiza en tu prueba de 1000 registros puedas incluir digamos unos 100 
> registros de cada año. y te averigues cual era el origen de las fotos.
> 
> Bueno ahi te envio mi foto de la cedula para que veas que es mas que 
> suficiente y eso que solo tiene 15Kb si tu caso se parece a lo que te comento 
> puedes aplicar estos pequeños aportes saludos
> 
> El 4 de agosto de 2017, 13:43, Diego Ayala <netdieg...@gmail.com 
> <mailto:netdieg...@gmail.com>> escribió:
> Buen dia, Gracias por tu ayuda, te explico, la tabla principal, de imagen 
> crece a razon de 4 a 5 GB por dia, debido a que se procesan entre 1500 a 2000 
> renovaciones o nuevas emisiones de cedulas de identidad personal, por eso ese 
> crecimiento. Es un software propietario que se instalo con el 8.3 en windows, 
> ya varios años atras, por lo tanto el mantemiento y demas se ha complicado.
> 
> El 4 de agosto de 2017, 14:08, jvenegasperu . <jvenegasp...@gmail.com 
> <mailto:jvenegasp...@gmail.com>> escribió:
> Diego que tal buen dia
> Queria preguntarte porque esta creciendo tanto tu BD ¿no sera que por ejemplo 
> tienes fotos gigantes y no las necesitas tan grandes?
> 
> Por ejemplo a mi me pasaba que mis usuarios tomaban fotos con camaras y 
> celulares con resoluciones de 8 10 o hasta 16Mb y luego las subian a la BD a 
> traves del sistema y bueno el resultado es que cada imagen la mas pequeña 
> pesaba 3 MB y cuando las mostraban en pantalla en el monitor pues ni siquiera 
> caben en el monitor tenian estar jugando con la lupa para que puedan verse.
> 
> y claro se ajustaba el tamaño en el sistema web pero igual a veces se notaba 
> lento cuando tenia que cargar una iamgen muy grande
> 
> Asi que lo que hice fue pues cambiarle el tamaño a todas las fotos 
> considerando solo un alto maximo de 999 pixeles y conservando el ratio de 
> aspecto asi ocupa casi todo el alto de la mayoria de monitores y se ven bien.
> bueno lo hice por partes con un where para ir avanzando y reduje el tamaño de 
> mi BD como 40 Gb en mi caso no tengo tanta información.
> 
> Quizas sea tu caso aqui te dejo el script en php que use para cambiar el 
> tamaño a las imagenes quizas sea tu caso.
> 
> set_time_limit(0);
> 
> ini_set('gd.jpeg_ignore_warning', 1);
> 
> $conn = pg_connect("user=usuario password=clave dbname=nombre_bd 
> host=ip_del_deserver port=5433");
> 
> $result = pg_query($conn, "SELECT fotos_notif_id FROM cp_fotos_notif where 
> fotos_notif_id >= 17105 ");
> 
> session_start();
> ob_end_flush();
> ob_start();
> 
> while ($raw = pg_fetch_array($result)) {
> 
>      $query = pg_query($conn, "SELECT foto FROM cp_fotos_notif where 
> fotos_notif_id = " . $raw['fotos_notif_id'] . "  ");
>      $row = pg_fetch_row($query);
> 
>      $image = pg_unescape_bytea($row[0]);
> 
>      $fichero = file_put_contents('image_original.jpg', $image);
> 
>      $fotito = 'image_original.jpg';
> 
> //Ruta de la imagen original
>      $rutaImagenOriginal = $fotito;
> 
>      //Creamos una variable imagen a partir de la imagen original
>      $img_original = imagecreatefromjpeg($rutaImagenOriginal);
> 
>      //Se define el maximo ancho o alto que tendra la imagen final
>      $max_ancho = 999;
>      $max_alto = 999;
> 
>      //Ancho y alto de la imagen original
>      list($ancho, $alto) = getimagesize($rutaImagenOriginal);
> 
>      if ($alto > 999) {
> 
>           //Se calcula ancho y alto de la imagen final
>           $x_ratio = $max_ancho / $ancho;
>           $y_ratio = $max_alto / $alto;
> 
>           //Si el ancho y el alto de la imagen no superan los maximos, 
>           //ancho final y alto final son los que tiene actualmente
>           if (($ancho <= $max_ancho) && ($alto <= $max_alto)) {//Si ancho 
>                $ancho_final = $ancho;
>                $alto_final = $alto;
>           }
>           /*
>            * si proporcion horizontal*alto mayor que el alto maximo,
>            * alto final es alto por la proporcion horizontal
>            * es decir, le quitamos al alto, la misma proporcion que 
>            * le quitamos al alto
>            * 
>            */ elseif (($x_ratio * $alto) < $max_alto) {
>                $alto_final = ceil($x_ratio * $alto);
>                $ancho_final = $max_ancho;
>           }
>           /*
>            * Igual que antes pero a la inversa
>            */ else {
>                $ancho_final = ceil($y_ratio * $ancho);
>                $alto_final = $max_alto;
>           }
> 
>           //Creamos una imagen en blanco de tamanio $ancho_final  por 
> $alto_final .
>           $tmp = imagecreatetruecolor($ancho_final, $alto_final);
> 
>           //Copiamos $img_original sobre la imagen que acabamos de crear en 
> blanco ($tmp)
>           imagecopyresampled($tmp, $img_original, 0, 0, 0, 0, $ancho_final, 
> $alto_final, $ancho, $alto);
> 
>           //Se destruye variable $img_original para liberar memoria
>           imagedestroy($img_original);
> 
>           //Definimos la calidad de la imagen final
>           $calidad = 95;
> 
>           //Se crea la imagen final en el directorio indicado
>           imagejpeg($tmp, "ejemplo.jpg", $calidad);
> 
>           $data = file_get_contents('ejemplo.jpg');
>           $pg_tmp = pg_escape_bytea($data);
> 
> //pg_query($conn, "insert into fotitos (foto) values('{$pg_tmp}')");
>           pg_query($conn, "UPDATE cp_fotos_notif SET foto = '{$pg_tmp}' WHERE 
> fotos_notif_id = " . $raw['fotos_notif_id'] . " ");
>           
>           echo 'se actualizo'.$raw['fotos_notif_id'].'<br>';
>           
>      } else {
>      
>           echo $raw['fotos_notif_id'].' ya tiene el tamaño menor a 999 <br>';
>      }
>      
>     ob_flush();
>     flush();
> }  
> pg_close($conn);
> 
> 
> 
> 
> 
> 
> 
> 
> 
> El 4 de agosto de 2017, 11:11, Diego Ayala <netdieg...@gmail.com 
> <mailto:netdieg...@gmail.com>> escribió:
> Buenos días, tengo un compañero de una institución que esta teniendo 
> problemas, el problema es el siguiente, tiene una DB PostgresSQL 8.3 sobre 
> windows, aclaro que es un sistema critico, y que al adquirir el software hace 
> varios años, se lo entregaron asi, el tema es que se esta quedando sin 
> espacio en disco, y ya no puede agregar discos(tiene 2TB de capacidad, pero 
> ya esta utilizado 1,8 TB), el cluster tiene varias DB's, pero es una  DB la 
> que tiene 1 sola tabla que es la que esta con crecimiento , la tabla tiene 
> 1.5TB (imágenes), que esta sobre un tablespace (otro disco) que también esta 
> quedando sin espacio, la pregunta que tengo, como se puede optimizar el 
> Backup, pg_dump, ya que dura aproximadamente 16hs en terminar y otras 15 
> horas en restore, es un sistema critico que no se puede parar por mucho 
> tiempo, la idea es migrar a un servidor nuevo, con mas disco, pero implica 
> parar para realizar el bkp, pero es mucho tiempo, alguien podria darme una 
> mano de como realizarlo, lastimosamente, el 8.3 no tiene todavia la 
> replicacion nativa, por lo tanto no puedo utilizar el SR.
> 
> Gracias.
> 
> 
> 
> 
> -- 
> José Mercedes Venegas Acevedo
> cel Mov RPC 964185205
> 
> Member of the PHP Documentation Group (Spanish)
> 
> 
> 
> 
> -- 
> José Mercedes Venegas Acevedo
> cel Mov RPC 964185205
> 
> Member of the PHP Documentation Group (Spanish)
> <foto_jvenegas.jpg>

Reply via email to