我正在尝试在 SQL 数据库上实现我自己的三重存储(是的,我知道那里已经完成了项目),并且我正在尝试确定实现符号“原子”的最佳方式。
在一个简单的设计中,我们可能会在 SQL 中实现一个三元存储,方法是创建一个“三元”表,其中包含三个 varchar 列,分别称为主题、谓词、对象。为了节省空间,我将创建一个“原子”表,它将存储在任何主题/谓词/宾语字段中使用的唯一文本,并将这些字段更改为链接回包含其文本的原子的外键。
但是,我看到了几种实现 Atom 表的方法。
将文本存储为 varchar。
- 优点:易于索引和强制文本的唯一性。
- 缺点:它不能存储任意大的文本。
将文本存储为文本 blob,以及在查询和强制唯一性时使用的文本哈希。
- 优点:可以存储任意大的文本。
- 缺点:稍微复杂一些。根据散列算法(md5、sha 等),可能会发生散列冲突,尽管很少见。
就性能、长期可靠性和存储任何类型数据的能力而言,哪种方法更好?如果我使用哈希,是否有关于冲突的有效担忧?即使冲突很少见,它也只需要发生一次就可以破坏三元存储。