Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 设计:多用户评论系统_Mysql_Algorithm_Web - Fatal编程技术网

Mysql 设计:多用户评论系统

Mysql 设计:多用户评论系统,mysql,algorithm,web,Mysql,Algorithm,Web,我试图找到一个好的解决方案,让多个用户(版主)在一个通用的评论系统上工作 我现在拥有的 +Mysql id、用户id、注释、日期、状态表 通过选择所有未批准的评论,未批准的评论将显示在版主页面中。版主查看评论后,可以使用适当的按钮(简单的更改状态或删除语句)批准/删除评论。如果只有一个版主,这就可以了 如果有多个主持人,我如何确保他们之间的一致性。例如,一旦第一位版主批准/删除了一条评论,我如何确保将该评论从所有其他版主列表中删除。我可以在mysql表上确保每个评论只更改一次,但我不希望有多个版

我试图找到一个好的解决方案,让多个用户(版主)在一个通用的评论系统上工作

我现在拥有的 +Mysql id、用户id、注释、日期、状态表

通过选择所有未批准的评论,未批准的评论将显示在版主页面中。版主查看评论后,可以使用适当的按钮(简单的更改状态或删除语句)批准/删除评论。如果只有一个版主,这就可以了

如果有多个主持人,我如何确保他们之间的一致性。例如,一旦第一位版主批准/删除了一条评论,我如何确保将该评论从所有其他版主列表中删除。我可以在mysql表上确保每个评论只更改一次,但我不希望有多个版主处理同一条评论(浪费资源)。

如果所有版主都需要查看所有评论,那么没有完美的解决方案:如果版主A和B都在未经批准的评论列表上查看评论X,两者都单击“查看”,并且A在B之前批准或拒绝它,然后当B单击“接受”或“拒绝”时,存在必须以某种方式解决的冲突。即使您以某种方式强制所有浏览器会话在更新到达数据库时从服务器端刷新查看未经批准的注释列表,您最多也可以减少发生此类冲突的机会;总有一个小窗口,当这不再是一个有效的操作时,B可以在其中单击“接受”或“拒绝”

您可以:

  • 在发表评论时,将(例如随机或通过循环)传入的评论分配给各个版主,以便每个评论只出现在版主的列表中,或
  • 接受主持人可能会单击“查看”、“接受”或“拒绝”陈旧评论,即已被其他主持人接受或拒绝的评论,并适当处理此问题(例如,使用错误消息,或通过覆盖以前的判断)
  • 如果使用方法2,请确保所有DB操作都发生在单个事务中,并且可以确定更新是否成功;不要用初始的
    SELECT
    进行“检查”,只有在
    UPDATE
    之后,这两个命令之间可能会潜入其他命令。(在单个DB事务中可以安全地使用单独的
    SELECT
    UPDATE
    命令,但只有在您确信了解DB使用的并发模型的情况下才可以这样做;例如,对于PostgreSQL,我相信您需要在通常的
    READ C中将
    FOR UPDATE
    添加到原始
    SELECT
    OMMITTED
    事务隔离级别。)

    我只建议

    UPDATE comments
    SET status = true
    WHERE userid = ?
    AND id = ?
    AND status = false
    
    最后一行意味着您将能够通过检查受影响的行数来检查该命令是否实际成功:如果其他主持人在您之前偷偷地进行了更改,则该更改将为0而不是1