使用PHP获取任何给定输入的唯一哈希值

我需要定期检查许多(100.000)行并检查它们的当前状态是否与另一个数据库中的最新存储版本相同.有没有办法为行匹配它们的某种唯一值,或者我是否必须逐列手动检查行?

数据库sql Server 2005数据库,该表没有用于创建,更新和/或删除操作的时间戳机制.我环顾四周检查是否有可用的行信息,但唯一可用的是伪列%% lockres %%和row information,但是它不提供日期和/或时间信息.

我的工具有限,但我有一个运行Apache和PHP的Web服务器,可以直接访问源数据库和目标数据库.我只对源数据库有读权限.

什么是比较数据和维护源数据库性能的最有效方法.

解决方法

由于您无权访问数据库,我建议使用“替代”数据库来存储信息.我可以想到几个不同的方法,每个方法都有不同的优点和缺点.

方法1

对于在表外使用哈希进行修改检查需要总是再次查询所有数据,使其操作非常慢,我会使用单独的表来存储哈希值,你可以随时首先检查值是否匹配然后更新它.

基本上在插入数据时,您可以根据该数据计算本地哈希值,然后将其与辅助数据库进行比较,如果它们不匹配,您就会知道数据不同步,并且可以将数据更新到真实数据库,将新哈希保存到帮助程序数据库.

优点:

>只对真实数据库进行必要的更新

缺点:

>比在数据库中使用哈希值慢

方法2

始终更新真实数据库中的记录.这是最简单的解决方案,除非您需要同时更新数千条记录并且远程数据库可以处理额外负载,否则性能影响不应该那么大.这只是简单的更新操作.

优点:

>简单易行

缺点:

>额外加载到真实数据库

方法3

只需获得修改远程数据库的权限.如果你要长时间保持这个东西,这可能是将来最好的事情.

优点:

>它会最快

缺点:

>您需要获得修改表的权限.

虽然我说数据库,最简单的可能只是纯文本文件,sqlite数据库或任何东西,它可以让你处理本地操作.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...