토론을 위해 FourSquare 시나리오를 고려해 봅시다.
대본
엔티티 :
- 사용자
- 장소
관계 :
- 체크인 : 사용자 <-> 장소, 다 대다
- 친구 : 사용자 <-> 사용자, 다 대다
데이터베이스 디자인
이것들은 대부분 오류가있을 것입니다, 지적하십시오.
RDBMS
테이블 :
- 사용자
- 장소
- 체크인 (접합)
- 친구 (정션)
장점 :
- CAP : 일관성, 가용성
단점 :
- CAP : 분할 공차, 일명 샤딩
- 계획 = 융통성없는 구조
- 불량 복제?
그래프
사물:
- 사용자
- 장소
가장자리 :
- 친구 : 사용자 <-> 사용자
- 체크인 : 사용자-> 장소
- 타임 스탬프 포함
장점 :
- CAP : 일관성, 가용성?
- 스키마가없고 쉽게 변경 가능한 객체와 가장자리
- 예를 들어 그래프 순회 쿼리
- 클러스터링
- 친구 그룹 찾기
- 비슷한 사람들이 좋아하는 음식점 찾기
- 다른 일반적인 / 유용한 쿼리가 있습니까?
- 클러스터링
단점 :
- CAP : 파티션 공차?
문서 / 개체
3 개의 별도 데이터베이스?
- 사용자
- 친구 목록
- 체크인
- 타임 스탬프
- 사용자
- 장소
- 장소
장점 :
- CAP : 가용성, 파티션 공차
- 스키마가없고 쉽게 변경 가능한 객체
단점 :
- CAP : 일관성
질문
기록을 위해 그들은 MongoDB를 사용했습니다. 위의 모든 물음표 외에 :
- 문서 데이터베이스를 구현하는 방법을 잘 모르겠습니다.
- 문서 데이터베이스는 어떻게 파티션 허용 오차를 얻습니까?
- 단일 사용자의 체크인을 얻으려면 작업이 모든 체크인을 구문 분석하고 사용자 이름 (맵 + 필터)의 메타 데이터를 필터링한다고 가정합니다. 각 사용자에 대해 1,000,000 개 이상의 문서를 구문 분석하는 성능은 끔찍합니다. 이것이 올바른 행동이 아니라고 생각합니까?
- 다른 어떤 장단점이 있습니까?