>  Q&A  >  본문

mongodb - 模型里包含需要不断增加的数据应该怎么设计?

需要设计的数据模型是一个投票帖子,用户投票后需要记录下来,以免重复投票。 现在的设计是把投过票的用户id保存为在投票贴里的一个数组。

mongodb在文档中嵌入不断增加的数据会对性能有损害,怎么设计能更好一些?

黄舟黄舟2759일 전677

모든 응답(1)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-22 08:58:19

    디자인하기 전에 데이터 크기를 확인하세요.

    1. 데이터가 매우 작아서 소수의 사람(1,000명 미만)만 투표하는 경우에는 걱정할 필요가 없지만, 늘어나더라도 간단히 배열로 넣을 수 있습니다(크기에 주의하세요. mongodb의 문서 제한 사항);
    2. 유권자 수가 1,000명을 초과하고 계속해서 증가하여 W(만) 규모에 도달하면 조기에 독립하여 게시물의 투표 기록을 저장할 또 다른 컬렉션을 생성하세요.
    3. 유권자 수가 W에 도달하고 투표 빈도가 상대적으로 빈번한 경우(또는 악의적인 투표 조작이 있는 경우) 캐시( redis는 기본적으로 Set 구조를 지원하여 반복적으로 투표할지 확인한 다음 백그라운드에서 정기적으로 mongodb에 동기화합니다.
    4. 유권자 수가 수백만 명에 이르고 투표 빈도도 객관적이라면 캐시를 사용해야 하며, 그것도 분산형 캐시 클러스터이며, 모든 유권자의 ID를 계산합니다(간단히 모드 작업을 하면 됩니다). 특정 캐시 서버에 매핑된 후 처리 방법은 3과 유사합니다.
    5. 4번과 유사한 프로세스: 서버 프런트 엔드에서 apache 또는 nginx를 통해 사용자 ID를 전달하고 이를 다른 애플리케이션 서버로 전송하여 처리합니다. 애플리케이션 서버도 분산 수평 확장을 수행합니다. 추신: 말씀하신 내용은 비즈니스 시나리오의 아주 작은 측면일 뿐입니다. NoSQL을 사용하든 SQL을 사용하든 관계없이 데이터 규모가 커지면 단일 시스템에서는 이를 감당할 수 없고 분산 확장도 불가피합니다. 시간이 지남에 따라 복잡성도 증가하므로 데이터 크기와 기술 조건에 따라 합리적으로 요금제를 선택해야 합니다.

    회신하다
    0
  • 취소회신하다