想知道是否可以在没有任何数据错误的情况下完成此过程。使用PHP7和MySQL innoDB。这仍处于理论阶段,如果你能在项目开始之前给出好的意见和建议,那将是一个巨大的帮助。
案件将是多个交易,即使在几微秒内也可能同时发生多个交易。
transaction
表将具有散列列,其中散列值是该事务的所有信息的散列+ salt +前一个散列值条目(如果存在)。
过程将是:
我担心的是,如果这些交易同时发生,是否有可能使用前一交易的相同散列值进行多次交易?
例如,最新的Tx散列值为abcd。如果5个新事务在微秒内同时进入,那5个将使用相同的最新Tx散列值abcd吗?我试图实现的结果是它将按顺序正确使用最新的散列值。
[编辑] 让我试着更清楚地解释一下。
hash(info + timestamp)
=" acbd" hash(info + timestamp + "abcd")
=" cdfg" hash(info + timestamp + "cdfg")
=" hijk" 我担心的是,如果3笔交易在第三笔交易后的微秒或纳秒内同时进入,那么新的3笔交易是否如下所示? (第四个事务仍然使用前一个哈希进行哈希处理,而第五个事务和第六个事务也使用相同的先前哈希进行哈希处理,之后第四个事务甚至设法完成并更新到数据库):
hash(info + timestamp + "hijk")
=" 12sd" hash(info + timestamp + "hijk")
=" x3sd" hash(info + timestamp + "hijk")
=" n76h" 我希望并希望我的结果是:
hash(info + timestamp + "hijk")
=" 12sd" hash(info + timestamp + "12sd")
=" mn34" hash(info + timestamp + "mn34")
=" 09lk" B计划(你怎么看?):
答案 0 :(得分:0)
取决于您的散列函数用作参数的内容。让我教你散列函数背后的数学美:
哈希函数意味着不会创建冲突并且健壮。
f
视为散列函数,将x
和y
视为两个不同的字符串。如果存在两个不同的字符串x
和y
,则f(x) = f(y)
会发生冲突。显然这是非常不好。因此,散列函数的设计使它们不会产生碰撞。x
和y
成为两个相等的字符串。我们希望散列函数返回相同的值,无论我们在相同的字符串上运行它,因此散列函数是健壮的,如果对于x = y
,它也是f(x) = f(y)
。现在我们知道了,我们必须问自己我们想要传递给哈希函数的是什么。显然,某些东西与用户不同,例如密码,用户名,电子邮件,这些的组合。我们也可以添加一些东西,一个 salt ,就像日期一样,只是为了让它更复杂,但实际上没有必要。
所以基本上你要担心的只是你要用什么数据进行散列,即用户名,数量等等。由于PHP脚本将针对每个事务单独运行,因为你将要散列的数据将是不同的(金额,时间等可能相同,但用户名会有所不同),无需担心碰撞。