gpt4 book ai didi

php - Mysql插入多个唯一行

转载 作者:行者123 更新时间:2023-11-30 21:53:54 25 4
gpt4 key购买 nike

想知道这个过程是否可以在没有任何数据错误的情况下完成。使用 PHP7 和 MySQL innoDB。这仍处于理论阶段,如果您能在项目开始前提供良好的意见和建议,将是一个巨大的帮助。

情况是会有多个交易,并且可能有多个交易同时发生,即使在几微秒内也是如此。transaction 表将有一个散列列,其中 hash 的值是该交易的所有信息的散列 + salt + 先前的散列值条目(如果存在)。

过程将是:

  1. PHP 将收到交易订单(用户信息、金额等)
  2. PHP 获取之前交易哈希的值(如果存在)
  3. 如果不存在交易(第一个交易),PHP 将哈希整个交易信息(sha256),Hx0,MySQL 将创建它的第一个条目,哈希值为 Hx0
  4. 如果之前已经有交易,PHP 将采用之前的哈希值 (Hx0) 并将其与整个当前交易信息 (sha256)、Hx1{Hx0} 一起哈希,MySQL 将在数据库中创建新条目
  5. 这个过程在 PHP 和 MySQL 之间一直重复,Hxn+1{Hxn}

我担心的是,如果这些交易同时发生,是否有可能有多个交易使用与前一个交易相同的哈希值?

例如最新的Tx哈希值是abcd。如果在微秒内同时进行 5 笔新交易,这 5 笔交易是否会使用相同的最新 Tx 散列值 abcd?我想要达到的结果是它会有序并正确使用最新的散列值。

[编辑]让我试着解释得更清楚。

  1. 第一笔交易的哈希值为 hash(info + timestamp) = "acbd"
  2. 第二笔交易的值为hash(info + timestamp + "abcd") = "cdfg"
  3. 第三笔交易的值为hash(info + timestamp + "cdfg") = "hijk"

我担心的是,如果在第三笔交易之后的微秒或纳秒内有3笔交易同时进入,那么新的3笔交易会不会像下面这样? (第四笔交易仍在使用之前的哈希值进行哈希处理,而第五笔交易和第六笔交易也在使用之前的相同哈希值进行哈希处理,甚至在第四笔交易完成并更新到数据库之前):

  1. 第四笔交易hash(info + timestamp + "hijk") = "12sd"
  2. 第五笔交易hash(info + timestamp + "hijk") = "x3sd"
  3. 第六笔交易hash(info + timestamp + "hijk") = "n76h"

我期望并希望我的结果是:

  1. 第四笔交易hash(info + timestamp + "hijk") = "12sd"
  2. 第五笔交易hash(info + timestamp + "12sd") = "mn34"
  3. 第六笔交易hash(info + timestamp + "mn34") = "09lk"

B 计划是(你怎么看?):

  1. 创建两个表。一个(表 A)接收所有交易而不进行哈希处理,另一个(表 B)对表 A 中的每个交易进行逐一哈希处理。
  2. 表 A 将插入所有条目,无论它是否同时在纳秒内。
  3. 表 B 将愉快地遍历表 A 并逐一散列每个条目,这也不受同时交易的影响,并且散列值按顺序正确排列。

最佳答案

取决于您的哈希函数用作参数的内容。让我教你散列函数背后的数学之美:

无碰撞和鲁棒性

哈希函数旨在不产生冲突并且是健壮的

  • 什么是碰撞?将 f 视为散列函数,将 xy 视为两个不同的字符串。如果存在两个不同的字符串 xy 使得 f(x) = f(y),就会发生冲突。显然这非常不好。因此,哈希函数的设计不会产生冲突。
  • 什么是稳健性?与之前的情况不同,现在让 xy 成为两个相等的字符串。我们希望哈希函数无论何时在同一个字符串上运行它都返回相同的值,因此哈希函数是健壮的,如果对于 x = y,它也是 f(x) = f(y).

既然我们知道了这一点,那么我们必须问问自己,我们想要传递给哈希函数的是什么。显然,某些东西因用户而异,例如密码,用户名,电子邮件,这些的组合。我们也可以向它添加一些东西,,比如日期,只是为了让它更复杂,但实际上没有必要。

你的情况

所以基本上您需要担心的只是要对哪些数据进行哈希处理,即用户名、金额等。由于 PHP 脚本将针对每笔交易单独运行,并且您要进行哈希处理的数据会有所不同(数量、时间等可能相同,但用户名会不同),无需担心碰撞。

关于php - Mysql插入多个唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com