我正在尝试对oracle DB中两个表之间的大字符串(5,000 - 80,000个字符)进行比较,并简单地确定是否存在任何差异。我计划在存储它们之前将字符串转换为BLOB,并且正在研究两种方法来进行比较。
使用DBMS_LOB.compare函数与使用MD5哈希函数并生成校验和来比较两个BLOB,在性能和准确性方面可能存在什么差异?
答案 0 :(得分:0)
只是使用常识......
案例1 - 第一次dbms_lob.compare()
价格是:
我们可以忽略实际的比较,因为这是在内存中完成的,而读取LOB则是从磁盘完成的。
整体价格=从磁盘读取2 x。
案例1 - dbms_lob.compare()
用于后续调用
价格是:
我们可以忽略实际的比较,因为这是在内存中完成的,而读取LOB则是从磁盘完成的。
整体价格=从磁盘读取2 x。
案例2 - 比较MD5哈希
价格是:
我们可以忽略实际的比较,因为这是在内存中完成的,只比较短的字节序列。
总价=从磁盘读取2 x +计算MD5 2 x。
我相信MD5可以在现代CPU上没有明显的性能下降的情况下进行计算,因此我建议忽略MD5的总体价格估算计算。因此...
整体价格=从磁盘读取2 x。
案例2 - 比较后续调用的MD5哈希值
假设您的LOB没有改变,因此您的预先创建和存储的MD5校验和对于未更改的LOB是正确的,价格是......那么,没有从磁盘读取LOB;这只是预先计算的MD5校验和的比较,所以......
总价=常数1
<强>结论强>
现在你选择最适合你的。
如果您需要进行一次性比较,请使用dbms_lob.compare()
。
但是,如果您需要,例如将每个LOB与每个LOB进行比较(= n × n 比较总计),那么您可以更好地预先计算MD5校验和并比较之后的校验和。 / p>