我在计划数据库以存储大量文本。 (博客文章,新闻文章等)数据库需要标题,内容(最多5万个字符),日期,链接和语言字段。同一内容不能在一个链接上发生。旧内容(例如30天以上)将被删除。PostgreSQL:在大型数据库上定义主键
现在,问题是主键。我可以设置一个自动递增(SERIAL类型)字段并将其用作主键。但是,这看起来很愚蠢,并且浪费了光盘空间,因为该领域不会有任何目的,只能成为主要关键。 (并且该字段最终可能会用完,或者不是?)并且总是存在其他性能问题:插入的每个新行的内容都需要检查重复项。因此,我提出的主键的另一个解决方案是计算内容+链接值的sha256散列,然后将其放在新的“散列”列中,并将其用作主键。一石二鸟。当然,这个问题是散列冲突。这是一个很大的威胁吗?
我对PostgreSQL没有任何经验,对DBMS的一般经验也很少,所以我希望在创建一个具有高速公路上蜗牛性能特征的数据库(可怕的比较)之前有第二种意见。
如果您对大型数据库有任何经验,请帮助我。在我的情况下,将64字符的字符串设置为主键字段是个好主意吗? (因为我的印象是,一般这是避免)
如果您使用SHA256作为主键,它不一定是不可变的吗?如果内容+链接值更改会发生什么? – 2009-06-29 19:37:45
哈维,好点,但如果一个会改变一行的内容值,那么我会检查是否存在新内容+链接alredy的散列。如果是这样,则不会发生变化。 – KRTac 2009-06-29 19:50:25
因此,如果内容发生变化,您创建一个新的记录? – 2009-06-29 20:31:37