Стратегия доступа к данным для сайта, такого как сортированные по SO запросы SQL и одновременные обновления, которые влияют на сортировку? - PullRequest
1 голос
/ 19 мая 2010

Я работаю над веб-приложением Grails, которое по шаблонам доступа будет похоже на StackOverflow или MyLifeIsAverage - пользователи могут голосовать за записи, а их голоса используются для сортировки списка записей по количеству голосов. Голоса могут быть размещены во время выполнения отсортированных запросов выбора.

Поскольку операции выбора блокировали бы большую часть таблицы, кажется, что нормальная блокировка транзакций приведет к тому, что обновления будут выполняться вечно (при условии достаточного трафика). Кто-нибудь работал над приложением с такой схемой доступа к данным, и если да, то нашли ли вы способ, чтобы эти обновления и выборки происходили более или менее одновременно? Кто-нибудь знает, как сайты, подобные SO, подходят к этому?

Я думал сделать сортированные выборки грязными, так как это приемлемо, если они не все время обновляются. Это моя единственная идея для возможного улучшения производительности этих выборов и обновлений, но я подумал, что кто-то может знать лучший способ.

1 Ответ

1 голос
/ 19 мая 2010

Не делайте слишком много выводов о своей базе данных - базы данных являются чрезвычайно сложными животными и почти всегда НЕ будут работать так, как вы думаете. База данных MVCC, которая является любой современной базой данных (т.е. не таблицами myisam), будет выполнять сканирование таблицы без сильной блокировки. Вся концепция MVCC заключается в том, что записи не блокируют чтения и наоборот. Но сканирование таблицы здесь не будет выполняться. Для эффективного ответа на запрос, вероятно, есть индекс голосов. Этот индекс будет использоваться для 1) ограничения количества строк, извлекаемых из таблицы 2) для извлечения их в отсортированном порядке (т.е. без выполнения сортировки).

...