Mysql 为什么正确的方法后阅读不能产生一致的结果?

Mysql 为什么正确的方法后阅读不能产生一致的结果?,mysql,sql-server,cassandra,akka.net,Mysql,Sql Server,Cassandra,Akka.net,我在看关于Akka.net的报道,演讲者说,右后读不会产生一致的结果,因为事件的顺序在网络层面上是不可预测的。演示者在本视频中谈到的ARH结构如下: 一个负载平衡器 多个web服务器。负载平衡器确定要命中的服务器 一个数据库服务器(SQL server) 我不明白为什么一个数据库不能获得一致的结果?如果在写入数据之前加上一个锁,这不会让你得到一致的结果吗?所以我猜你说的是Aaron在这段视频中描述的场景。以下是场景: 用户在一个站点上点击东西,我们发出异步请求来记录点击 他所描述的场景中不明显的

我在看关于Akka.net的报道,演讲者说,右后读不会产生一致的结果,因为事件的顺序在网络层面上是不可预测的。演示者在本视频中谈到的ARH结构如下:

  • 一个负载平衡器
  • 多个web服务器。负载平衡器确定要命中的服务器
  • 一个数据库服务器(SQL server)
    我不明白为什么一个数据库不能获得一致的结果?如果在写入数据之前加上一个锁,这不会让你得到一致的结果吗?

    所以我猜你说的是Aaron在这段视频中描述的场景。以下是场景:

  • 用户在一个站点上点击东西,我们发出异步请求来记录点击
  • 他所描述的场景中不明显的部分是,我们不会等待前面的请求完成,然后再发送更多的请求来捕获用户的点击(想象一下一个单页面应用,点击不会导致服务器完全刷新页面)。我们想捕捉所有的点击
  • 我们在服务器上有这样的逻辑:“如果用户连续点击这三个东西,做一些冷静的反应…”
  • 我们在web服务器上检查我们的情况(“用户是否连续单击了这3件事?”),方法是将我们刚刚到达的单击事件写入数据库,然后读取,看看他们是否生成了3件事的流,以进行我们的冷静反应
  • 问题是:每个记录点击的请求都可能会发送到不同的web服务器,我们不会等到前一个请求完成后再发送更多记录点击的请求。因此,我们无法保证写入第一个事件的请求在写入第二个或第三个事件之前已经完成,以此类推

    例如,由于网络故障,第一个请求可能会延迟(甚至失败!),因此第二个请求可能会首先到达我们的SQL Server!因此,当它读取发生的事件流时,它无法意识到发送了(但尚未完成)记录第一个事件发生的请求


    我认为他试图指出的一点是,面对多个客户端(在本例中,是web服务器)同时向数据库写入数据,您不能指望“我先发送它,所以它将首先被记录”。无论您使用的是DataStax Enterprise、Cassandra、SQL Server、Oracle还是其他产品,这都是正确的。希望有帮助

    所以我猜你说的是Aaron在这段视频10分钟后描述的场景。以下是场景:

  • 用户在一个站点上点击东西,我们发出异步请求来记录点击
  • 他所描述的场景中不明显的部分是,我们不会等待前面的请求完成,然后再发送更多的请求来捕获用户的点击(想象一下一个单页面应用,点击不会导致服务器完全刷新页面)。我们想捕捉所有的点击
  • 我们在服务器上有这样的逻辑:“如果用户连续点击这三个东西,做一些冷静的反应…”
  • 我们在web服务器上检查我们的情况(“用户是否连续单击了这3件事?”),方法是将我们刚刚到达的单击事件写入数据库,然后读取,看看他们是否生成了3件事的流,以进行我们的冷静反应
  • 问题是:每个记录点击的请求都可能会发送到不同的web服务器,我们不会等到前一个请求完成后再发送更多记录点击的请求。因此,我们无法保证写入第一个事件的请求在写入第二个或第三个事件之前已经完成,以此类推

    例如,由于网络故障,第一个请求可能会延迟(甚至失败!),因此第二个请求可能会首先到达我们的SQL Server!因此,当它读取发生的事件流时,它无法意识到发送了(但尚未完成)记录第一个事件发生的请求


    我认为他试图指出的一点是,面对多个客户端(在本例中,是web服务器)同时向数据库写入数据,您不能指望“我先发送它,所以它将首先被记录”。无论您使用的是DataStax Enterprise、Cassandra、SQL Server、Oracle还是其他产品,这都是正确的。希望有帮助

    如果您指出您正在谈论的数据库,这将非常有帮助。您列出的两个有事务提交,一个没有。Cassandra只使用LWW策略进行写操作,没有锁定机制来确保读操作在返回读操作之前等待写操作完成。@RussS捕捉正确!我用sql server更新了答案。如果您指出您正在谈论的数据库,这将非常有帮助。您列出的两个有事务提交,一个没有。Cassandra只使用LWW策略进行写操作,没有锁定机制来确保读操作在返回读操作之前等待写操作完成。@RussS捕捉正确!我用sql server更新了答案。