Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
站点的数据访问策略,如排序SQL查询和影响排序的同步更新?_Sql_Concurrency_Transactions_Dirtyread - Fatal编程技术网

站点的数据访问策略,如排序SQL查询和影响排序的同步更新?

站点的数据访问策略,如排序SQL查询和影响排序的同步更新?,sql,concurrency,transactions,dirtyread,Sql,Concurrency,Transactions,Dirtyread,我正在开发一个Grails web应用程序,它的访问模式与StackOverflow或MyLifeIsAverage类似——用户可以对条目进行投票,他们的投票用于根据投票数对条目列表进行排序。可以在执行排序的选择查询时放置投票 由于selects将锁定表的很大一部分,因此正常事务锁定似乎会导致更新花费很长时间(给定足够的通信量)。是否有人在使用这种数据访问模式的应用程序上工作过?如果有,您是否找到了允许这些更新和选择或多或少同时发生的方法?有人知道这样的网站是如何做到这一点的吗 我的想法是使排序

我正在开发一个Grails web应用程序,它的访问模式与StackOverflow或MyLifeIsAverage类似——用户可以对条目进行投票,他们的投票用于根据投票数对条目列表进行排序。可以在执行排序的选择查询时放置投票

由于selects将锁定表的很大一部分,因此正常事务锁定似乎会导致更新花费很长时间(给定足够的通信量)。是否有人在使用这种数据访问模式的应用程序上工作过?如果有,您是否找到了允许这些更新和选择或多或少同时发生的方法?有人知道这样的网站是如何做到这一点的吗


我的想法是使排序选择脏读,因为它是可以接受的,如果他们不是完全最新的所有时间。这是我唯一可能提高这些选择和更新性能的想法,但我认为有人可能知道更好的方法。

不要对您的数据库进行太多推断-数据库是极其复杂的动物,几乎总是无法按您的想法工作。MVCC数据库是任何现代数据库(即不是myisam表),它将执行表扫描而不会严重锁定。MVCC的整个概念是写操作不阻止读操作,反之亦然。但此处不执行表扫描。为了有效地回答查询,可能有一个投票索引。该索引将用于1)限制从表中检索的行数2)按排序顺序检索它们(即,不执行排序)。

不要对数据库进行太多推断-数据库是极其复杂的动物,几乎总是不会按照您的想法工作。MVCC数据库是任何现代数据库(即不是myisam表),它将执行表扫描而不会严重锁定。MVCC的整个概念是写操作不阻止读操作,反之亦然。但此处不执行表扫描。为了有效地回答查询,可能有一个投票索引。该索引将用于1)限制从表中检索的行数2)按排序顺序检索它们(即不执行排序)。

好的一点是,计算可以存储在字段中并编制索引。我只是想知道,如果每次有人投票时都更新索引字段,它会如何执行。。。我可能应该试一下,然后进行压力测试看看。是的,问一个性能问题,让评测为你自己工作。如果由于某种原因,速度太慢,您可以将投票批处理几分钟(很可能您正在缓存查询大约那么长的时间),然后将它们一起应用到一个事务中。因为如果一些选票在系统故障中丢失,这并不重要。但是,只有当它被测量为一个问题,并且没有更简单的解决方案(总是有-你只需要想想它。)啊,好的一点,计算可以存储在一个字段中并索引。我只是想知道,如果每次有人投票时都更新索引字段,它会如何执行。。。我可能应该试一下,然后进行压力测试看看。是的,问一个性能问题,让评测为你自己工作。如果由于某种原因,速度太慢,您可以将投票批处理几分钟(很可能您正在缓存查询大约那么长的时间),然后将它们一起应用到一个事务中。因为如果一些选票在系统故障中丢失,这并不重要。但只有当它被衡量为一个问题,并且没有更简单的解决方案(总是存在的——你只需要想一想)