나는 과거 기간, 지난 주 및 지난 달의 세 기간에 걸쳐 클릭 수를 추적합니다. 열은 계산 열이 합세 개의 테이블을 하나의 열 또는 너무 많은 열로 결합 하시겠습니까?
에게 제공과 함께, 두 개의 다른 속성 및 hour_24에 hour_1을 LINK_ID으로,
시간별 테이블 :
이 작업을 수행하기 위해, 나는 세 개의 테이블을 가지고 합계를 계산하는 열과 함께 click_id 열, 다른 두 개의 특성 및 day_1부터 day_7까지의 계산식 열
위와 같이 day_1부터 day_31까지의 열이있는 테이블
클릭이 오면 다른 표에 href, description 등의 주요 속성을 저장하고 위의 표에서 각각의 link_id에 해당하는 행을 삽입 또는 업데이트합니다.
각 링크는 위의 시간별/요일/월별 표에 사용자가 앉아있는 위치와 같은 다른 두 속성에 따라 여러 항목을 가질 수 있습니다.
사용자가 유형 A이고 X에 앉으면 위의 표에 3 개의 행이 생성되거나 추가됩니다. 첫 번째 행은 해당 기간 동안 해당 링크의 모든 클릭을 기록하고 두 번째 행은 모든 클릭을 기록합니다. '유형 A', 세 번째 '모든 사용자의 클릭 수'.
각 시간/일/주/월 주위로 데이터를 이동하지 않으려 고했기 때문에이 방법으로 설계했습니다. 난 그냥 "현재 시간"(1-24), "현재 하루"(1-31) 및 "현재 평일"(1-7)에 대한 포인터를 유지하고 테이블의 해당 셀에 쓰기. 새로운 기간 (예 : "오후 3시 - 오후 4시")을 입력하면 현재 열 (예 : hour_15)을 비워두고 링크가 들어올 때마다 해당 열을 증가시키기 시작할 수 있습니다. 모든 빈번히 나는 오래된 행을 삭제할 수 있습니다 "모두 제로"로 낮추십시오.
이렇게하면 열 데이터를 이동할 필요가 없습니다. 열 데이터가 잠재적으로 수십만 개가 될 가능성이 매우 높습니다.
삽입/업데이트 이전의 현재 요일/요일/시간 행 또는 속성을 기반으로 계산 된 열의 TOP 20 값만을 선택합니다 (이러한 결과를 1 시간 정도 캐시 할 가능성이 높습니다)).
테이블이 채워지면 UPDATES는 많은 고유 한 href가 없으므로 INSERT를 훨씬 초과합니다.
세 가지 질문 :
이 monthdays/평일/시간의 하나 개의 큰 테이블에 세 개의 큰 테이블을 결합 할 OK인가? 이것은 64 컬럼을 가진 테이블을 제공 할 것인데, 나는 과잉이라고 확신하지 못한다. 다른 한편으로, INSERT/UPDATE 문을 세배로하는 것과 같이 별도로 유지하는 것이 필요합니다. 나는 SQL Server에 대해 어느 것이 최선인지 알기에는 충분하지 않습니다.
이 방법이 의미가 있습니까? 물론 작업 한 대부분의 데이터 세트는 항목 당 별도의 행을 가지며 날짜순으로 정렬됩니다.하지만 수천 명의 사용자가 클릭 수를 추적하면 많은 수십만 개의 행을 가져올 수 있습니다. 매우 자주 주문하고 합산하는 것은 끔찍할 것입니다. 추적기가 입증되면 클릭 수를 수백 페이지 이상으로 끌어 올 계획이 있으므로 확장해야합니다.
디자인 측면에서 볼 때, 평일과 월 모두가 중복되어 있음이 분명합니다. 그러나 이것이 내가 열을 가리키는 포인터를 유지하고 빠르게 업데이트하고 계산 된 열을 사용하는 유일한 방법이었습니다. 평일 테이블을 삭제하면 이전 7 일을 합산 한 '월간'에 대한 추가 계산 열이 필요합니다 (예 : 오늘이 21 일, sum day_14, day_15, day_16 ... day_20). 계산은 매일 업데이트해야하는데 비용이 많이들 것이라고 상상합니다. 따라서 간단한 정적 계산을위한 추가 "평일"테이블. 소규모 데이터 스토리지보다 간단하고 빠른 계산을 중요하게 생각합니다.
미리 감사드립니다.
감사합니다. 예, 이것이 내가 시작한 것입니다. 아주 많이 제기 된 깃발, 따라서이 게시물. 나는 데이터에 대해 너무 많은 분석을하기를 원하지는 않지만 더 개방적 일수록 더 좋다. 핵심은 성능입니다. 이것은 인트라넷의 동적 탐색 모델을 향한 첫 번째 단계입니다. 사용자는 엄격한 계층 구조에 의존하기보다 "동료와 가장 인기있는", "이번 주 가장 인기가있는"등으로 찾아 볼 수 있습니다. 큰 변화 .... – Jhong
... 클릭 수신기는 페이지의 대부분의 링크에 연결되며 10k 사용자의 경우 엄청난 양의 데이터가 유입됩니다. 이렇게하면 응용 프로그램 서버가 크롤링 속도가 느려집니다 나는 이것이 미래라고 사람들에게 납득시키는 데 어려움을 겪을 것입니다. 한편, 이것이 우리 홈페이지에서 입증되면, 인트라넷의 대부분의 모든 페이지 (Sharepoint 인스턴스를 포함하여 수천 페이지)와 더 많은 사용자를위한 방법으로 추진할 것입니다. 정확한 분석에 관심이 없습니다.이 단계에서 순수하게 집계됩니다. ... – Jhong
... 나는 정규화 된 모델을 선호하지만 50 만 개의 행이있는 테이블에서 그룹 및 순서와 함께 count (*)가 얼마나 비쌉니까? 테스트를 대신하는 것은 없지만, 나는 올바른 볼 파크에서 디자인을 얻고 싶어합니다. – Jhong