Database 存储大量重复字符串。寻找好的散列函数来节省存储空间。

Database 存储大量重复字符串。寻找好的散列函数来节省存储空间。,database,oracle,Database,Oracle,我正在寻找一个好的散列函数来节省存储空间,同时在数据库中存储大量重复字符串 我有一个数据库,我必须存储这个 日期费率说明 xxx yyyy ZZZ 百万行的100秒;描述是最大的,比如说1K字符串。描述字符串重复性高;我将得到许多副本。为了避免太多(浪费)的存储,我们正在考虑这样做 表1 日期速率描述ID 表2 描述ID描述 方法1:DESC_ID==MD5 hash-->DB在DESCID上有主键;app生成散列;DB写入速度很快(这就是我的想法) 方法2:DESC_ID==DB生成的ID;唯

我正在寻找一个好的散列函数来节省存储空间,同时在数据库中存储大量重复字符串

我有一个数据库,我必须存储这个 日期费率说明 xxx yyyy ZZZ

百万行的100秒;描述是最大的,比如说1K字符串。描述字符串重复性高;我将得到许多副本。为了避免太多(浪费)的存储,我们正在考虑这样做

表1 日期速率描述ID

表2 描述ID描述

方法1:DESC_ID==MD5 hash-->DB在DESCID上有主键;app生成散列;DB写入速度很快(这就是我的想法)

方法2:DESC_ID==DB生成的ID;唯一密钥必须是描述;DB写入可能比上述方法慢

问题1:我应该坚持使用MD5还是有更好的算法?为了在理论上更好地避免碰撞,同时增加额外的存储和计算时间,是否值得使用SHA-x函数


问题2。我应该考虑接近2吗?

为什么写得慢?接近2?对于第一种方法,您必须散列您的描述,然后通过PK查看该ID是否存在;对于第二个,您只需通过英国直接查看描述是否存在。我是否遗漏了什么?当然,避免has更快?如果性能如此关键,可能重复值的存储开销无论如何都是值得的。Alex,我认为第二种方法会很慢,因为UK检查长字符串比PK检查32个字符字符串(MD5散列)的成本更高。我还没有做过实验来验证这一点。我想如果你在数据库之外做散列,这可能是有意义的。关于您的设置的更多信息可能会有用。重复率有多高;是否有一个小的ish定义的描述集,或者您可以得到任何东西,并且可能需要动态创建新的查找条目?也许你的应用程序可以缓存描述和ID。