2017-01-19 3 views
1

나는 뉴스 페이퍼 웹 사이트를 웹 크롤 링하고있다.mongoDB에서 JSON 데이터를 구성하는 방법은 무엇입니까?

사이트에는 제목, 일부 텍스트, 타임 스탬프, 작성자 및 설명 섹션이 포함 된 기사가 포함되어 있습니다.

의견 섹션에는 등록 된 다른 사용자의 의견이 있으며 기사에 댓글을 달거나 댓글을 올리거나 다른 댓글에 답글을 달 수 있습니다.

저는 MongoDB (초급)를 사용하고 있으며, 제 질문은 JSON 객체에서 keept가 될 것입니다.

예를 들어, 각 뉴스 기사는 그 안에 모든 사용자 주석이있는 단일 개체입니다. 아니면 각각의 텍스트/주석을 자신의 객체로 갖는 것이 더 읽기 쉽겠습니까?

{"article": { 
"id": "title of article", 
"text": "text of article", 
"author": "author of article", 
"date": "date", 
"comment_section": { 
    "user": "username", 
    "text": "text from comment", 
    "upvotes": int, 
}, 
}} 

또는 뭔가 같은 : 첫 번째 예는 그 안에 많은 데이터를 적은 수의 개체,하지만 그들의 물건을 많이하고, 후자의 객체의 많은,하지만있을 것

{"text": { 
    "text_type": "article text or comment", 
    "text": "text of article or comment", 
    "date": "date", 
    "author": "author of article or comment author", 
    "upvotes": int, 
}} 

.

감사합니다.

답변

0

json의 모든 기능은 트리에 속하기 때문에 하나의 문서에 모든 데이터가 포함될 수 있습니다. 하위 문서 및 예상 값에 색인을 추가하여 문서의 필요한 부분 만 쿼리 할 수 ​​있습니다.

거대한 주석 섹션이있을 것으로 예상되는 경우 임베디드 주석이 문제가 될 수 있습니다. mongodb은 전체 문서를 읽고 주석 목록에 새 주석을 추가하고 다시 작성해야하기 때문에 문제가 될 수 있습니다.

이상적으로는 중급 솔루션으로 이동하십시오. 20-50 세 미만의 댓글 (기사 및 '다음 댓글'버튼과 함께 렌더링 됨)이있을 때까지 댓글을 포함시킨 채로 보관하십시오 추출 된 주석 컬렉션에 들어오는 주석. 그렇게하면 기사를 단일 몽고 (mongo) 쿼리로 렌더링 할 수 있으므로 사용자 상호 작용별로 하나의 몽고 쿼리를 효과적으로 만들 수 있습니다. 이것이 DB 디자인의 기본 방법입니다.

mongo를 사용하면 개체 크기 + 업데이트 양과 해당 데이터를 외부 모음으로 추출하고 그에 대한 추가 쿼리를 수행하는 데 소요되는 시간을 항상 활용해야합니다.

+0

제가 알다시피, 첫 번째 옵션을 제안합니다. 다른 모든 뉴스 기사를 동일한 객체에 저장하도록 제안합니까? – Isbister

+0

내 경험에 비추어, 기사 수집을 제안하고 어쨌든 페이지 렌더링에 표시 할 첫 번째 N 개의 주석을 저장하십시오. 따라서 기사 페이지를 렌더링 할 때 모든 데이터를 단일 문고 쿼리로 가져옵니다. N 개 이상의 주석이있을 경우 추가 기사를 별도의 컬렉션에 배치하십시오. 단일 기사에서 수천 개의 주석으로 쉽게 커질 수 있기 때문에 기사의 문서를 읽거나 수정하는 데 너무 많은 비용이 소요될 수 있습니다. –

관련 문제