Estoy planificando una base de datos para almacenar gran cantidad de texto. (entradas de blog, artículos de noticias, etc.) La base de datos debe tener el título, el contenido (máximo de 50k caracteres), fecha, enlace y campos de idioma. El mismo contenido no puede ocurrir en un enlace. El contenido antiguo (anterior a 30 días, por ejemplo) se eliminará.PostgreSQL: Definición de una clave principal en una base de datos grande
Ahora, el problema es la clave principal. Podría simplemente establecer un campo de incremento automático (tipo SERIAL) y usarlo como clave principal. Pero parece estúpido y un desperdicio de espacio en disco, porque el campo no serviría para nada más que ser una clave principal. (y el campo podría eventualmente agotarse, o no?) Y siempre existe el otro problema de rendimiento: el contenido de cada nueva fila insertada debe verificarse para ver si hay duplicados. Así que la otra solución para la clave principal que se me ocurrió sería calcular un hash sha256 de contenido + valor de enlace y luego poner eso en una nueva columna 'hash' y usar eso como clave principal. Dos pájaros con una piedra. Por supuesto, el problema con eso son colisiones hash. ¿Es una gran amenaza?
No tengo ninguna experiencia con PostgreSQL, y muy poca experiencia con DBMS en general, por lo que agradecería una segunda opinión antes de crear una base de datos con las características de rendimiento de un caracol en la carretera (comparación horrible).
Por favor, ayúdenme si tiene alguna experiencia con grandes bases de datos. ¿Es una buena idea establecer una cadena de 64 caracteres como clave principal en mi situación? (Porque estoy bajo la impresión de que por lo general esto se evita)
¿Incluyeron sus pruebas "el otro problema de rendimiento: el contenido de cada nueva fila insertada necesita [sic] verificar duplicados"? – onedaywhen