배경
소셜 네트워킹 기능이 포함 된 클라이언트 용 앱을 개발 중입니다. 나는 원래 모바일 프론트 엔드를 개발하고 있었지만 상황에 따라 백엔드 개발을 담당하게되었습니다.
일반적으로 Google 시스템을 통해 사용자는 소셜 네트워크에서 예상 한대로 다른 사용자를 팔로우하고 팔로우중인 사용자에 대한 알림을받을 수 있습니다. 주의 할 점은 대부분의 사용자 기반이 이러한 개인 중 하나 이상을 따를 것으로 예상하면서 작은 하위 집합 (최대 수백 명)의 사용자 만 추적 할 수 있다는 것입니다.
UI쪽에는 숫자가 포함 된 알림 버튼이 있으며 버튼을 클릭하면 알림 화면으로 이동합니다.
문제
나는 알림을 구현하기위한 전략과 데이터베이스에서 하나 이상의 알림 테이블을 만드는 데 도움이되는 대부분의 리소스를 연구했습니다. (내가 좋아하는 예는 /programming/9735578/building-a-notification-system 여기에서 허용되는 답변 입니다.)
나를 버리는 것은 대부분의 데이터베이스 기반 알림 전략에는 각 팔로어에 대한 각 알림에 대한 행을 삽입해야한다는 것입니다. 따라서 수천 명의 사람들이 Sally를 따르는 경우 해당 테이블에 천 개의 행을 삽입합니다. 확장 성이 있습니까? 수만 또는 수십만 명의 사용자가 Sally를 팔로우하고 하루에 수십 개의 게시물을 작성하는 시점에 도달하면 어떻게됩니까?
내 원래 아이디어는 쿼리로 모든 것을 처리하는 것이 었습니다. 알림 버튼의 숫자는 알림 화면을 마지막으로 방문한 시간보다 최근에 게시 된 콘텐츠의 행 수를 요청하여 얻을 수 있지만 더 자세한 쿼리에서 개별 알림이 생성됩니다 알림 화면을 방문했을 때 이 방법은 쓰기 나 추가 스토리지가 필요하지 않지만 융통성이 없으며 서버를 상당히 어렵게 만들 수 있습니다.
설정
이전 개발자가 설정 한 백엔드는 CodeIgniter 와 MySQL 데이터베이스를 사용 합니다. 현재 크 래피 GoDaddy 공유 호스팅 계정에서 실행 중이지만 프로덕션에 들어가기 전에 업그레이드 될 것으로 가정하고 호스팅 패키지는 사용자 증가에 따라 확장됩니다.
현재 우리의 유일한 프론트 엔드는 모바일 앱이지만 나중에 웹 사이트도 구축 할 계획입니다. 지금은 서버에서 알림에 대한 실시간 푸시 업데이트를 얻는 것에 대해 걱정하지 않습니다.
추가
저는 백엔드를 전문적으로 다루지 않으며 해당 부서에서 근무하고 있습니다. 고객은 그것을 알고 있으며, 이러한 성격의 프로젝트의 범위를 설명하기 위해 최선을 다했지만 지금은 다른 사람이 프로젝트를 수행하는 것을 믿지 않을 것임을 분명히했습니다. 테스터 추가를 시작하기 전에 한 달 더해야 할 일이 있으며 모든 종류의 성능 지표를 얻을 수 있습니다. 앞으로 5 년 동안 얼마나 많은 사용자가 있는지, 어떤 하드웨어가 있을지 예측할 수 없지만 클라이언트는 수십만 명 이상의 사용자를 기대하고 있습니다.
나는 이것이 여기에 게시되기에 충분한 문제가되기를 바란다. 필요한 경우 다듬을 수 있습니다. 질문이 있거나 중요한 세부 사항을 생략했는지 문의하십시오.
tl; dr
- 데이터베이스 기반 알림 시스템이 모든 사용자가 동일한 수백 명 중 일부만 팔로우 할 경우 장기 확장성에 부정적인 영향을 미칩니 까?
- 각 팔로어에 대한 각 알림에 대해 별도의 알림 행이 없어도 데이터베이스 기반 알림을 만드는 방법이 있습니까?
- 완전히 쿼리 중심의 알림 시스템이 확장 가능합니까? 아니면 DB에 데이터를 쓰지 않는 것 외에 다른 장점이 있습니까?
- 너무 일찍 생각하고 있습니까? 지금 작동하는 것을 제작해야하는데, 고객이 예산이 제한되어 있고 최종 제품이 인기가 있는지 아직 알지 못한다면 문제가 될 경우 최적화에 대해 걱정할 수 있습니까?