数据库设计 - mongodb文章和评论放在同一条数据里效率怎样?
黄舟
黄舟 2017-04-21 10:57:50
0
2
641

将评论和文章放在一起,这里我有一个疑问,当评论数量很大以后,会不会导致在查询文章列表页的时候效率低下?
如果将comments剥离到另一个collection里,这样是不是能缓解只显示文章列表的情况下的压力

{
	"_id" : ObjectId(),
	"author" : "",
	"comment_num" : "",
	"comments" : [
		{
			"text" : "",
			"created" : ISODate(),
			"author" : ""
		},
	],
	"created" : ISODate(),
	"text" : "",
	"title" : ""
}
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(2)
大家讲道理

@halty는 좋은 지적을 하지만 그의 의견에 전적으로 동의하지는 않습니다. 댓글이 많지 않다면 조합된 디자인도 적당하고 위에서 말씀드린 내용도 아주 좋습니다. 하지만 댓글이 너무 많으면 문제가 발생합니다. 가장 중요한 것은 두 가지 기본 출발점입니다. 1. 하드 디스크가 너무 느립니다. 2. 데이터가 메모리에 있는 한 문제가 없습니다.

  1. 찾기
    데이터가 매우 크면 메모리 매핑 파일이 메모리에 저장되기 때문에 디스크에서 많은 데이터를 읽어야 하지만 그 중 극히 일부만 필요합니다. 주요 문제는 OS가 페이징할 수 있다는 것입니다. 다른 데이터는 하드 디스크에 저장됩니다. 단지 기사를 나열하는 것만으로는 메모리가 효율적으로 사용되지 않습니다.
  2. 삽입
    디스크 파일에서 문서가 계속해서 길어지는 경우가 여러 번 발생하는 것은 좋지 않습니다. 왜냐하면 예를 들어 새로운 코멘트가 추가되는 등 새로운 데이터가 추가되면 문서가 커지고 원래 위치에 맞지 않기 때문에 새로운 위치를 찾아야 하고 이전 구멍을 재사용하게 되기 때문입니다. 그런데 문제는 문서 위치가 변경되면 그에 관련된 모든 인덱스도 변경되어야 한다는 점이다. 댓글을 게시한 사용자의 이름과 같이 배열에 인덱스가 있는 경우 업데이트된 인덱스는 배열 길이와 선형적으로 관련됩니다.
  3. 사이즈
    위의 분이 이 점에 대해 좋은 지적을 하셨습니다. 16MB 상한.

결론적으로 댓글이 너무 많으면 경기력에 영향을 미치게 됩니다.

요약, 스키마 디자인을 고려해야 한다

  1. 데이터 규모는 자주 접근하는 데이터가 메모리에 저장되어 있으면 접근하는데 문제가 없습니다. 위의 첫 번째 find에서 언급한 메모리 활용 부족은 사실 큰 문제가 되지 않습니다. 인기기사의 댓글은 늘 많은 사람들이 읽게 되므로 기억해 두는 것이 좋습니다. 문서가 계속 길어지면 MongoDB는 이를 할당할 때 자동으로 더 많은 디스크 공간을 할당합니다.
  2. 액세스 패턴과 호환됩니다. 기사나 댓글을 읽는 것에 비해 댓글 쓰기는 너무 적습니다. 트위터의 데이터에 따르면 평균 트윗은 5K/s이고 읽기 타임라인은 300K/s입니다. 읽기 요청이 메모리에서 충족될 수 있는 한. MongoDB를 사용하면 추가 캐싱이 필요하지 않습니다. 인터뷰 내용이 정말 크거나 기사가 너무 많으면 상관없다고 말하기는 쉽습니다. 그날에는 MongoDB의 샤딩이 도움이 될 것입니다.
  3. 개발 용이 제품의 가격은 기계 하드웨어와 네트워크 비용뿐만 아니라 더 중요한 것은 프로그래머의 개발 비용과 연봉이 너무 높기 때문입니다... 따라서 빠르고 편리하며 작성하는 것도 매우 중요합니다. 오류가 발생하기 쉽지 않죠? 이는 MongoDB 문서 모델의 유연성이 널리 칭찬받는 이유를 설명합니다.

그러고보니 이런 어플은 대부분 댓글이 100개가 넘지 않을 것 같은데... 이때는 댓글 수백개도 활용해도 문제 없을 것 같습니다. 주제는 문제가 되지 않습니다. 질문자의 신청이 이 숫자를 넘어설 수 있었으면 좋겠습니다...

左手右手慢动作

먼저 댓글 수가 많을 경우 기사 목록 페이지 조회 시 비효율성이 발생하지 않도록 주의하세요. 쿼리 결과 집합의 문서가 필드 데이터의 일부만 반환하도록 지정할 수 있습니다. (필드 데이터의 일부만 포함하는 문서를 업데이트하고 저장하면 오류가 발생할 수 있다는 점에 유의해야 합니다.) 권장되며 쉽게 네트워크 대역폭을 절약할 수 있습니다.

또한 현재 MongoDB는 단일 문서의 크기에 제한이 있습니다. 댓글이 너무 많으면 문서의 기본 크기 제한을 초과할 수 있으므로 이때 댓글을 제거해야 합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿