사용자 이벤트 데이터를 저장하기위한 적절한 기술


12

나는 데이터베이스 디자인에 관해서는 대부분 독학입니다. 나는이 공통 구조에 정착했기 때문에이 질문을 제기하고 있지만 그것이 가장 효율적인지 또는 '산업 표준'방법인지 궁금합니다.

내가 디자인 한 대부분의 데이터베이스에는 사용자 테이블이 있고 다른 테이블에서 개인 활동이 추적됩니다. 데이터베이스의 아름다움은 이러한 종류의 효율성을 갖는 것임을 이해하지만 활동 테이블은 정기적으로 사용하는 모든 사용자로부터 많은 이벤트를 상당히 빠르게 수집하므로 적절한 사용자 사용으로 상당히 빠른 테이블이됩니다. 이 방법으로 성장시키는 것이 가장 좋은 방법입니까? 아니면 날짜, 사용자 수 또는 기타 항목을 기준으로 테이블 계층 또는 다른 테이블로 분할됩니까?

+--------------------+                   +------------------------+
|   UserData         |                   |   Activity             |
+-=------------------+                   +------------------------+
| ID     (auto uint) | <--1-to-many-+    | ID  (auto uint)        |
| UserName (text)    |              +--> | UserID (uint)          |
| Email    (text)    |                   | Timestamp (time)       |
| additional info... |                   | Type (ID to elsewhere) |
+--------------------+                   | additional info...     | 
                                         +------------------------+

배우기 위해 무엇을 개선 할 수 있는지 알고 싶습니다.

답변:


5

아니면 날짜, 사용자 수 또는 기타 항목을 기준으로 테이블 계층 또는 다른 테이블로 분할됩니까?

데이터베이스에서 '파티셔닝'개념을 살펴볼 수 있습니다. 대부분의 RDBMS는이를 지원합니다 (예 : mysql , oracle , sql server , postgresql ). 기본적으로, RDBMS는 매월 / 연도 / 무엇이 별도의 테이블에 저장되어 있다는 사실을 작성 / 관리하는 프로세스를 처리하도록하고 액세스하는 코드는이를 하나의 큰 테이블로 취급합니다.

사용자 이름, 날짜 또는 가장 자주 데이터에 액세스하는 데 사용되는 것으로 파티션을 나눌 수 있습니다. (사용자 중심 대 날짜 중심으로 만드는 것의 장점 / 단점이 있습니다 ...하지만 모든 것을 원하는지 모르겠습니다)


@Joe에게 감사드립니다. Wikipedia ( en.wikipedia.org/wiki/Partition_%28database%29 )와 게시 한 링크 중 일부를 읽었습니다 . 참조 할 파티셔닝 유형은 가로 파티셔닝입니다. 이것은 내가 지금까지 몰랐던 기능입니다. 이제 dba.stackexchange.com/questions/4134/… 라는 새로운 질문을 제기 할 것 입니다. 적절한 파티션 연습을 요구합니다.
CenterOrbit

6

당신은 아주 좋은 관찰을했습니다. 활동 표는 빠르고 커질 것입니다. 내가 과거에 한 일은 오래된 데이터 (예 : 14 일 이상)를 ActivityHistory 테이블에 아카이브하는 것 입니다. 이렇게하면 활동 테이블이 관리 가능한 크기로 유지되며 조사해야 할 경우 항상 활동 기록 테이블을 다시 볼 수 있습니다 .


1
나는 당신의 아이디어를 좋아하며 @Joe 솔루션을 지원하지 않는 거의 모든 데이터베이스 설정에 맞는 솔루션입니다. 그러나 이전 아카이브 된 데이터에 액세스하고 통합 조인을 추가해야하는 경우 관련된 쿼리 중 일부가 복잡해집니다. 그럼에도 불구하고, 나는이 접근법을 생각하지 않았습니다. 감사합니다.
CenterOrbit

이것은 반드시 복잡하지는 않습니다. 데이터가 오래된 경우 앱에서 연결 문자열을 사용하여 기록 DB를 선택할 수 있습니다. 또는 프로 시저에서 연결된 서버를 사용하고 일부 날짜 시간이 x보다 오래된 경우 일이면 주 서버 대신 아카이브 링크 서버로 이동하십시오.
Marian

ArchiveHistory 테이블이 동일한 데이터베이스에 있으면 훨씬 덜 복잡합니다.
마이클 라일리-일명 Gunny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.