소셜 투표 시스템을 만들 때, 반대 투표와 찬성 투표를 별도로 DB에 보관해야 하나요?

StackOverflow https://stackoverflow.com/questions/733288

문제

SO, Digg, Reddit 등...

찬성표와 별도로 데이터베이스에서 반대표를 추적해야 합니까?아니면 단순히 사용자의 행동에 따라 감소/증가하는 "투표" 필드를 유지하지 않고 보유해야 합니까?

투표는 어떻게 처리되어야 합니까?

도움이 되었습니까?

해결책

따라서 투표는 +10, 하락 투표 -2를 얻습니다. 이것이 작동하려면 별도로 추적해야합니다. 논란의 여지가있는 답변이 각각 몇 가지를 생성하는 것이 가능하며, 집계 번호를 보여주는 것만으로는 그리 큰 의미가 없습니다. 그래서 나는 그것들을 별도로 유지한다고 말하고 싶습니다.

다른 팁

나는 그것들을 별도로 유지할 것입니다. 일부 질문에는 많은 활동 (위아래로)이 있으며,이를 식별하는 것을 정말로 좋아합니다.

현재 차이에 관심이 없더라도 테이블의 추가 필드는 비싸지 않으므로 분리하는 것은 아프지 않습니다. 나중에 추가하려면 데이터가 별도로 저장되지 않으면 데이터를 검색 할 수있는 방법이 없기 때문입니다.

또한 CW 및 비 CW 항목에 대해 별도의 투표를 유지한다고 가정합니다. 질문이 나중에 CW로 변경되면, Recalc를 사용하더라도 원래의 소송/잃어버린 담당자는 유지되기 때문입니다.

데이터로 무엇을하고 싶은지에 따라 다릅니다.

내가 말하는 것보다 투표 만 표시하고 싶다면 하나의 필드 만 사용한다고 말합니다. 포럼에서 스레드의 수의 수와 같습니다. 당신은 대부분의 클릭을 얻는 것을보고 싶어하지만 누군가가 그것을 몇 번이나 보았는지는 아닙니다.

투표 시스템 SO는 조금 더 복잡합니다. 특정 사용자로부터 모든 투표를 취소 할 수 있으므로 추적해야합니다. 누구 투표/반대 무엇. 이것은 다른 테이블로 작성되었지만 누군가가 질문을 볼 때마다 모든 투표를 다시 계산하는 것이 비싸기 때문에 누군가가 현장에서 계산 된 가치를 유지하여 누군가 투표 할 때마다 변경합니다.

특정 Up 또는 Downvote를 작성한 추가 데이터를 사용하여 별도로 저장하는 것이 좋습니다. 누가 아는 사람, 당신은 내일 좋은 아이디어를 생각해 낼 수 있으며이를 구현하려면이 추가 데이터가 필요할 것입니다.

그러나 기복 또는 다운 보트가 제출 될 때마다 업데이트되는 일종의 사전 계산 된 필드 (캐시라고합시다)를 갖는 것이 좋습니다. 그런 다음이 미리 계산 된 필드로 페이지가 렌더링됩니다. 이렇게하면 응답 시간이 증가하고 DB의 부하가 줄어 듭니다.

값을 즉시 다시 계산하기에는 너무 코스티드 인 경우 즉시 일정 투표를 처리하고 캐시 된 값을 다시 계산할 수있는 일부 스케줄러 작업 (시간당 한 번?)을 고려할 수 있습니다.

소셜 투표 웹 사이트 데이터베이스에 가질 데이터 금액을 고려하여 추가 공간을위한 추가 공간 int 다운 투어를 저장하는 열은 무시할 수 있으므로 미쳤을 것입니다.

음, SO가 찬성에 대해 +10, 반대에 대해 -2를 갖고 있고 때때로 재계산이 진행되고 있다는 점을 고려하면 이를 독립적으로 저장해야 합니다.

그렇지 않으면 원래 90포인트를 주었던 찬성 10개와 반대 5개의 답변이 별도로 저장되지 않으면 다시 50포인트로 계산됩니다.

나는 그것들을 별도로 검토 할 수 있도록 분리 된 상태로 유지했습니다. 사회적으로, upvoting은 다운 투표와는 매우 다르며, 그것이 나라면 독립적으로 볼 수 있기를 원합니다.

아주 간단한 이유가 하나로 분명히 별도로. 내일 당신은 그 정보가 필요한 추가 작업을하고 싶을 것입니다 (예 : 일종의 보고서 또는 그래프). 그것들을 별도로 유지하는 것 외에도 비용이 들지 않습니다.

사람들은 일반적으로 한 번 투표 할 수 있고 (예를 들어) 투표를 취소 할 수 있으므로 누가 투표했는지, 어떤 투표 및 어떤 항목에 대한 투표를 해야하는지 알아야합니다.

수를 유지하는 집계 필드가있을 수 있지만 다운 보트와 업벤트가 별도로 유지 될 것이라고 확신합니다. 따라서 나중에 투표를 변경할 수 있습니다 (다운 투표를 뒷받침하십시오). 그래서 저는 각 사용자에 대해 투표가 기록된다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top