Php 我应该使用全局ID';s或找到我的通知系统的其他解决方案?

Php 我应该使用全局ID';s或找到我的通知系统的其他解决方案?,php,sql,guid,uuid,Php,Sql,Guid,Uuid,因此,我几乎已经完成了我的通知系统,就在我即将实现reCAPTCHA之前,我测试了如果我发送通知会发生什么 给你一些关于我的通知系统的背景资料。我通过时间戳来确定最新的内容。我按时间戳顺序从数据库中检索行。时间戳值是格式化为的整数。显示通知时,它们是遵循此URL格式的超链接- http://test.com/article/id 其中id是表的id,每次提交新文章时,id都会递增。我注意到在我发送了垃圾邮件通知后,垃圾邮件通知的URL的顺序是相反的。经过进一步的调查,我发现如果我发送垃圾邮件的

因此,我几乎已经完成了我的通知系统,就在我即将实现reCAPTCHA之前,我测试了如果我发送通知会发生什么

给你一些关于我的通知系统的背景资料。我通过时间戳来确定最新的内容。我按时间戳顺序从数据库中检索行。时间戳值是格式化为的整数。显示通知时,它们是遵循此URL格式的超链接-

http://test.com/article/id
其中id是表的id,每次提交新文章时,id都会递增。我注意到在我发送了垃圾邮件通知后,垃圾邮件通知的URL的顺序是相反的。经过进一步的调查,我发现如果我发送垃圾邮件的速度足够快,timestamp变量就不够准确,并且用相同的时间戳记录多个提交

由于我的网站现在的流量很低,提交的内容也不多,这目前不是问题,但是如果,一个很小的机会,但是如果一个内容与另一个内容同时提交,那么当它们提交错误时,通知会排名靠前,这是一个很小但令人讨厌的错误

所以我想知道我该怎么做。我应该解决这个问题,还是这是一个非常微小的机会发生这种情况。由于reCAPTCHA的实施,垃圾邮件不是一个问题,但仍有可能是偶然发生的

我提出了3种可能的解决方案。我的问题是哪一个效率最高

  • 为所有4种类型的内容创建一个全局id,该id在每次创建评论、文章或更新时递增
  • 使用更精确的PHP时间函数,例如
  • 添加一些二级排序变量

  • 考虑到集群中可能有多个线程甚至多个节点在不同的表中插入数据,因此您使用的任何基于时钟的值都有可能在多个表中重复,甚至在同一个表中重复

    所以我的第一个想法是使用一个全局id表。您可以使用一个具有自动递增主键的公共
    内容
    表,该主键由所有其他表的外键输入,并用于排序

    另一方面,根据同样的逻辑,您如何确保提交之间的固定顺序?很有可能两个提交将以与服务器接收相反的顺序提交到数据库。我认为解决这个问题的唯一办法是拥有一个所有请求都必须通过的全球网关。如果您使用的是这样的守门员,那么这也是分配排序值的最佳位置


    总而言之,我认为你不应该坚持完全订购,因为它不存在,除非它是一个高度订购敏感的系统,如交易或博彩。否则微秒就足够了,只要文章注释的通知不在文章本身之前发出。

    考虑到集群中可能有多个线程甚至多个节点在不同的表中插入数据,您使用的任何基于时钟的值都有可能在多个甚至同一个表中重复

    所以我的第一个想法是使用一个全局id表。您可以使用一个具有自动递增主键的公共
    内容
    表,该主键由所有其他表的外键输入,并用于排序

    另一方面,根据同样的逻辑,您如何确保提交之间的固定顺序?很有可能两个提交将以与服务器接收相反的顺序提交到数据库。我认为解决这个问题的唯一办法是拥有一个所有请求都必须通过的全球网关。如果您使用的是这样的守门员,那么这也是分配排序值的最佳位置


    总而言之,我认为你不应该坚持完全订购,因为它不存在,除非它是一个高度订购敏感的系统,如交易或博彩。否则,只要文章的注释通知不在文章本身之前,微秒就足够了。

    对于进行适当负载测试的人来说……首先,您的
    timestamp
    列不应该是整数,而应该是
    DATETIME
    一。如果您有一个
    AUTO_INCREMENT
    id列,则不需要
    orderbytimestamp
    。您已经有一个按id排序的结果集。很抱歉,我没有添加,但我有多个表,用于每种不同类型的内容,一个用于评论,一个用于文章等。请参阅是否需要排序列来跨不同类型的内容进行排序?也就是说,你需要知道一篇文章A出现在对文章B的评论之前还是之后?是的,我需要一个实时的“提要”,它可以显示任何内容的每一次创建或修改,按时间顺序。对于进行适当负载测试的人来说……首先,您的
    时间戳
    列不应该是整数,而应该是
    日期时间
    一。如果您有一个
    AUTO_INCREMENT
    id列,则不需要
    orderbytimestamp
    。您已经有一个按id排序的结果集。很抱歉,我没有添加,但我有多个表,用于每种不同类型的内容,一个用于评论,一个用于文章等。请参阅是否需要排序列来跨不同类型的内容进行排序?也就是说,你需要知道一篇文章A出现在对文章B的评论之前还是之后吗?是的,我需要一个实时的“提要”,它可以按时间顺序显示任何内容的每一次创建或修改。“…只要对文章的评论通知不出现在文章本身之前”-是的,这样就可以了,谢谢你提醒我,我总是需要在创建文章之前检查是否放置了评论。谢谢“…只要文章评论通知不在文章之前”—叶