【问题标题】:Any way to compress comluns into an unique shorter value to do data row comparisons将列压缩为唯一的较短值以进行数据行比较的任何方式
【发布时间】:2014-12-30 14:42:15
【问题描述】:

我正在考虑让数据库更新更容易一些。

对于这种情况: 需要通过 PK 比较 DB A 到 DB B 的所有列,以了解该行是否需要更新。

简单的方法是用分隔符连接所有列,然后进行比较。 例如:

string row_A=column1+column2+.....column20;
string row_B=column1+column2+.....column20;
if(row_A!=row_B)
{...}

但我想知道有没有更好的方法,比如将这些列计算为唯一值, 像哈希或其他东西,然后我可以将这些值保存到表中。

uniqueValue_A=makeUniqueValue(column1+column2+.....column20);
uniqueValue_B=makeUniqueValue(column1+column2+.....column20);
if(uniqueValue_A!=uniqueValue_B)
{...}

然后我只需要比较这些唯一的数字或字符串。

【问题讨论】:

  • 你可以使用校验和来做这样的事情。会减少打字次数。
  • 散列不可靠。考虑连接:J + amesJam + es 相同。散列可以有相同的冲突。如果您遇到性能问题,请考虑改进索引以支持比较。如果您没有遇到性能问题,请在需要时进行优化。
  • 明白,数据太大,不能让所有列都被索引。只是问更好的想法

标签: c# sql sql-server hash hashmap


【解决方案1】:

如果您有这些行上次更新时间的时间戳或行版本号,通常其中之一是在需要“同步”的表上实现的,并且每次发生更新时都会更新/递增。

否则,如果不能比较每个值,那么哈希函数(所有列的哈希值分别)然后是该哈希函数的哈希值将是第二好的。

附:散列永远不会保证没有冲突,但根据您的数据集有多大,这不太可能。

【讨论】:

  • 是的,先生。我们有时间插入和更新,还有......其他的......即使仍然需要完整的比较......
  • 你不能检查更新/插入的时间吗?如果它们不匹配,则意味着后一个已更改。也就是说,如果两个数据库中的两个时间都相同,除非更改。
  • 我们通常做的,但有时这种机制不能完美地工作。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多