Grails 웹 앱에서 StackOverflow 또는 MyLifeIsAverage와 유사한 액세스 패턴을 사용하고 있습니다. 사용자는 항목에 투표 할 수 있으며 투표는 투표 수에 따라 항목 목록을 정렬하는 데 사용됩니다. 정렬 된 선택 쿼리가 수행되는 동안 투표를 배치 할 수 있습니다.SO와 같은 사이트에 대한 데이터 액세스 전략 - 정렬에 영향을주는 SQL 쿼리와 동시 업데이트?
선택 항목이 테이블의 큰 부분을 잠그므로 일반적인 트랜잭션 잠금으로 인해 충분한 트래픽이 제공되는 업데이트가 영원히 걸릴 것으로 보입니다. 누구나 이와 같은 데이터 액세스 패턴으로 앱을 작업 한 적이 있습니까? 그렇다면 이러한 업데이트를 허용하고 더 많거나 적게 동시에 수행하도록 선택할 수있는 방법을 찾았습니까? 사람이 그렇게 접근 방식을 알고있는 사람이 있습니까?
제 생각에 정렬 된 더티 읽기를 선택하는 것이 좋았습니다. 항상 완전히 최신이 아닌 경우 받아들이 기 때문입니다. 이것은 아마도 이러한 선택 및 업데이트의 성능을 향상시킬 수있는 유일한 방법이지만 누군가가 더 나은 방법을 알고 있다고 생각했습니다.
좋은 점은 계산을 필드에 저장하고 색인을 생성 할 수 있다는 것입니다. 나는 누군가가 투표 할 때마다 색인 된 필드를 업데이트하는 경우 어떻게 수행 될지 궁금합니다. 아마도 시도해보고 스트레스 테스트를 봐야합니다. –
예, 성능 질문을하고 프로파일 링을 직접 해보십시오. 어떤 이유로 든 너무 느린 경우 몇 분 동안 일괄 적으로 투표 할 수 있습니다 (어쨌든 그 길이에 대한 쿼리를 캐싱 할 가능성이 있습니다). 그런 다음 한 트랜잭션에서 함께 적용합니다. 시스템 실패로 일부 표를 잃어 버리면 중요하지 않기 때문입니다. 하지만 문제가되는 것으로 측정 된 경우에만 가능하며 더 간단한 해결책은 없습니다 (항상 생각해보십시오.) – Eloff