Sto pianificando un database per memorizzare molto testo. (post di blog, articoli di notizie, ecc.) Il database deve avere il titolo, il contenuto (max 50 caratteri al massimo), la data, il link e i campi della lingua. Lo stesso contenuto non può verificarsi su un link. I vecchi contenuti (più vecchi di 30 giorni, ad esempio) verranno eliminati.PostgreSQL: definizione di una chiave primaria su un database di grandi dimensioni
Ora, il problema è la chiave primaria. Potrei semplicemente impostare un campo di incremento automatico (tipo SERIAL) e usarlo come chiave primaria. Ma sembra stupido e uno spreco di spazio su disco, perché il campo non servirebbe a nessuno scopo ma essere una chiave primaria. (e il campo potrebbe esaurirsi, o no?) E c'è sempre un altro problema di prestazioni: il contenuto di ogni nuova riga inserita deve essere controllato per i duplicati. Quindi l'altra soluzione per la chiave primaria che ho trovato sarebbe quella di calcolare un hash sha256 di contenuto + valore di collegamento e quindi metterlo in una nuova colonna "hash" e usarlo come chiave primaria. Due piccioni con una fava. Naturalmente, il problema con questo sono le collisioni hash. È una grande minaccia?
Non ho alcuna esperienza con PostgreSQL e poca esperienza con i DBMS in generale, quindi apprezzerei un secondo parere prima di creare un database con le caratteristiche di prestazione di una chiocciola sull'autostrada (confronto orribile).
Per favore aiutatemi qui se avete qualche esperienza con database di grandi dimensioni. L'impostazione di una stringa di 64 caratteri come campo chiave primaria è una buona idea nella mia situazione? (Perché io sono sotto l'impressione che in genere questo è evitato)
I test includevano "l'altro problema di prestazioni: il contenuto di ogni nuova riga inserita deve essere [sic] da verificare per i duplicati"? – onedaywhen