2012-03-19 3 views
0

저는 MySQL 데이터베이스로 실행되는 소규모 PHP 소셜 네트워크를 운영합니다. 네트워크의 사용자는 다양한 그룹에 가입하여 업데이트를받을 수 있습니다.PHP의 기본 알림 시스템

그룹이 새 업데이트를 릴리스 한 경우 사용자에게 알리고 싶습니다.

나는 소켓으로 멋진 것을하고 싶지 않습니다. 사용자가 마지막으로 활동 한 이후 얼마나 많은 업데이트가 게시되었는지 디스플레이하고 싶습니다.

나는 사용자가 페이지를 새로 고침 할 때마다 사용자에 대한 현재 시간을 기록 할 생각이었습니다. 이렇게하면 사용자가 마지막으로 업데이트 된 시간과 업데이트 된 날짜를 비교할 수 있습니다.

모든 페이지로드시 데이터베이스에 쓰는 것이 좋습니다. 다른 적당한 제안?

답변

1

이 작업을 수행하는 가장 좋은 방법은 실제로 데이터베이스에 쓰는 것입니다. 그러나 성능 측면에서 볼 때 속도를 높이는 데는 몇 가지 방법이 있습니다. 내가 생각할 수있는 두 가지 방법은 인기있는 그룹에 대한 업데이트를 캐싱하고 사용자와 타임 스탬프 만 포함하는 테이블을 생성하는 것입니다. 둘 다 인덱싱되므로 매우 빠르게 작동해야합니다.

+0

답장을 보내 주셔서 감사합니다. 기존 사용자 테이블에서 하나의 열을 추출하는 것보다 별도의 테이블을 사용하는 것이 더 빠른 이유를 설명 할 수 있습니까? 건배. – Alex

+0

차이점이 실제로 느껴질 지 모르겠지만 테이블이 매우 큰 경우에는 동일한 쿼리를 사용하여 다른 정보를 얻는 경우 불필요한 오버 헤드가 발생합니다. – Ynhockey

+0

여분의 오버 헤드는 어디에서 오는가? 분명히 두 테이블 모두 동일한 수의 행을 가지며 동일한 필드에서 인덱싱 할 수 있습니다. – Alex

1

해결책은 괜찮습니다. 데이터베이스의 올바른 필드를 색인화하십시오. 다시 이런 질문이 당신 .. 다음 단계를 가면

지금 :

  • 는 그것을 시도
  • 는 확장 성 문제에 대한 걱정이 있다면 측정

길 아래로. 당신이 기대하는 (또는 지원하고 싶은) 레코드 수를 측정하는 것을 제외하고는 같은 것을 다시하십시오. 10.000 개의 레코드 또는 수백만 개의 레코드를 생성하고 다시 시도하는 것은 쉽습니다.

실제로이 허용치를 초과하는 속도로 떨어지면 문제를 적어두고 잠재적으로 최적화 할 수있는 방법을 다시 묻습니다.

+0

예 아빠. 차라리 가난한 대안을 낭비하는 시간을 테스트하는 것보다 영리한 솔루션에 대해 생각하면서 시간을 보내고 싶습니다. – Alex

+0

모든 데이터베이스 기반 솔루션은 특정 상황에서 성능 문제를 일으킬 수 있습니다. 먼저 측정하는 경우에만 문제가 있는지 파악하고 (더 복잡한) 대안을 탐색 할 수 있습니다. – Evert

+0

매우 일반적인 상황을 설명하므로 매우 일반적인 답변 이상을 기대할 수 없습니다. (예 : 검색어가있는 단일 입력란에 대해 걱정 하시겠습니까?). – Evert