用于事务性重复验证处理的关系数据库的替代方法?

时间:2016-08-11 16:35:59

标签: sql sql-server database duplicates

我目前正在使用SSMS,使用两张表,这两张表都有数百万条记录;我们称之为: latest_status表 dupe_hash 表。

latest_status

  • latest_status_PK - bigint - identity(1,1)

  • status - bigint

    • 50 =>阶段零

    • 100 =>阶段酮

    • 200 =>阶段二

    • 999 =>重复的失败的

dupe_hash

  • dupe_hash_PK - bigint - identity(1,1)

  • latest_status_FK(与latest_status的关系) - bigint

  • md5 - varchar(256)

  • batch_id - uniqueidentifier

我的目标是查看 dupe_hash 记录(其中 latest_status .status = 100)并查看此记录 md5 与其他记录 md5 相同;我根据状态 es更新了这些内容的 latest_status.status 。有点像:

* record_1' s = 100& record_2' s = 200 =>将record_1的状态更新为999

* record_1' s = 100& record_2' s = 50 =>将record_1的状态更新为200,将记录_2的状态更新为999

我目前正在使用基于集合的操作,将此查询保存到表变量中,并使用case语句更新 latest_status 表。在md5的分区中,我根据状态命令子集,因为最后我只想保留一条记录( rowid = 1)而其他记录设置为999:

SELECT ROW_NUMBER() OVER(PARTITION BY DUPHASH.MD5 ORDER BY CASE WHEN LATEST_STAT.STATUS = 200 THEN 0 WHEN LATEST_STAT.STATUS = 50 THEN 1 ELSE 1 END, LATEST_STAT.latest_status_PK DESC) ROWID,
 LATEST_STAT.CLAIM_OUTBOUND_LATEST_STATUS_KEY,
 LATEST_STAT.STATUS,
 DUPHASH.DUPLICATE_KEY,
 DUPHASH.BATCH_ID,
 DUPHASH.MD5
  FROM DBO.DUPE_HASH DUPHASH
 INNER JOIN DBO.LATEST_STATUS LATEST_STAT
 WHERE MD5 IN (SELECT DISTINCT MD5
             FROM DBO.DUPE_HASH DUPHASH
                INNER JOIN DBO.LATEST_STATUS LATEST_STAT
                   ON DUPHASH.LATEST_STATUS_FK = LATEST_STAT.LATEST_STATUS_PK
                WHERE STATUS = 105) ON DUPHASH.LATEST_STATUS_FK = LATEST_STAT.LATEST_STATUS_PK

这让我想到了我的实际问题:这种方法是否有任何替代/改进可以支持实时/跨境处理?

  • 表格分区?

  • 非关系型数据库?

我真的全都耳朵。谢谢!

0 个答案:

没有答案