tipo rendimiento memoria mejorar insertar imagenes imagen guardar dato aumentar file postgresql blob bytea

file - memoria - mejorar rendimiento postgresql



¿Hay problemas de rendimiento al almacenar archivos en PostgreSQL? (2)

Básicamente tienes dos opciones. Puede almacenar los datos directamente en la fila o puede usar la función de objetos grandes. Dado que PostgreSQL ahora usa algo llamado TOAST para mover campos grandes fuera de la tabla, no debería haber una penalización de rendimiento asociada con el almacenamiento de datos grandes en la fila directamente. Queda un límite de 1 GB en el tamaño de un campo. Si esto es demasiado limitado o si desea una API de transmisión, puede usar la función de objeto grande, que le da algo más como descriptores de archivos en la base de datos. Almacena el ID de LO en su columna y puede leer y escribir desde ese ID.

Personalmente, sugeriría que evite la instalación de objetos grandes a menos que la necesite absolutamente. Con TOAST, la mayoría de los casos de uso se cubren con solo usar la base de datos de la forma que usted espera. Con objetos grandes, se da una carga de mantenimiento adicional, ya que debe realizar un seguimiento de las ID de LO que ha usado y asegurarse de desvincularlas cuando ya no se usan (pero no antes) o se sentarán en su Directorio de datos ocupando espacio para siempre. También hay muchas instalaciones que tienen un comportamiento excepcional a su alrededor, cuyos detalles se me escapan porque nunca los uso.

Para la mayoría de las personas, la gran penalización del rendimiento asociada con el almacenamiento de grandes datos en la base de datos es que su software ORM extraerá el big data en cada consulta, a menos que usted indique específicamente que no lo haga. Debe tener cuidado de decirle a Hibernate o lo que sea que esté usando para tratar estas columnas como grandes y solo recuperarlas cuando se las solicite específicamente.

¿Está bien almacenar archivos como páginas HTML, imágenes, PDF, etc. en una tabla en PostgreSQL o es lento? Leí algunos artículos que dicen que esto no es recomendable, pero no sé si es verdad.

¿Y qué es mejor usar, almacenar como BLOB (se almacena en un archivo, verdad?) O en una columna de tipo bytea ?


El tipo BLOB (LO) almacena los datos en fragmentos de 2KB dentro de las páginas del montón de PostgreSQL estándar que por defecto tienen un tamaño de 8KB. No se almacenan como archivos independientes y cohesivos en el sistema de archivos; por ejemplo, no podría ubicar el archivo, hacer una comparación byte a byte y esperar que sea la misma que la información del archivo original cargado en la base de datos, ya que también hay encabezados de página de montón de Postgres y estructuras que delinean los trozos.

Debe evitar el uso de la interfaz de Objeto grande (LO) si su aplicación necesitaría actualizar con frecuencia los datos binarios, y particularmente si eso involucraba muchas escrituras pequeñas de acceso aleatorio, debido a la forma en que PostgreSQL implementa el control de concurrencia (MVCC) puede llevar a una explosión en la cantidad de espacio en disco usado hasta que VACÍMAS la base de datos. Es probable que el mismo resultado también sea aplicable a los datos almacenados en línea en una columna con el tipo de bytea o incluso TOAST.

Sin embargo, si sus datos siguen un patrón de escritura una vez que leen muchos (por ejemplo, cargue una imagen PNG y nunca la modifique más adelante), debería estar bien desde el punto de vista del uso del disco.

Consulte este hilo de la lista de correo general pgsql para obtener más información.