2017-12-20 9 views
0

Firestore, 채팅 앱을 개발할 때 모범 사례가 있는지 묻고 싶습니다. 채팅방에 메시지를 저장하는 가장 좋은 방법은 무엇입니까?firestore : 배열과 문서 모음의 성능 비교

모든 대화방에는 고유 한 문서가 있다는 가정이 있습니다.

사용자가 보낸 메시지를 저장하기 위해 배열을 사용하기 시작했습니다. 이 방법의 문제점은 새 메시지가 채팅방에 제출 될 때마다 새 항목을 추가 (추가) 할 수있는 방법이 없다는 것입니다. 하나는 새 메시지를 추가하여 배열의 새 복사본을 저장해야합니다. 채팅 내역이 서브 어레이 등으로 나뉘어져 있지 않은 한, 이것은 실제로 나쁠 것입니다.

공식 문서에서는 특정 chatroom의 메시지를 별도의 문서로 저장해야하는 구조를 제안합니다 그 chatroom의 소장품에서. 이 방법이 최선인지, 어떤 단점이 있을지, 아니면 다른 방법으로이 작업을 수행 할 수 있을지 궁금합니다.

+0

채팅방의 모든 메시지를 단일 문서에 저장하면 허용 된 크기 인 1MB보다 큰 문서로 빠르게 이동합니다. 배열을 사용하는 것은 [이 블로그 게시물] (https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html)에서 설명한 것처럼 다중 사용자 환경에서는 좋지 않습니다. 각 채팅 메시지에 대해 별도의 문서를 사용하는 것이 가장 단순 해 보입니다. 문서가 그 방향으로 나아가는 것을 감안할 때 왜 다른 접근법이 더 좋다고 생각합니까? –

+0

아니, 네가 맞아, 난 그냥 nosql 데이터베이스와 아무 경험이 없어 그리고 나는 많은 것들을 조금 conter 직관적 인 MySQL의 배경에서 오는 것을 찾는다. –

답변

0

일반적으로 "모든 대화방에는 메시지의 하위 집합이 있으며 모든 새 메시지는이 하위 집합의 개별 문서입니다."라는 접근 방식이 사용됩니다. 여기에는 몇 가지 장점이 있습니다. 개별 메시지를 쉽게 추가하거나 편집 할 수 있으며 여러 가지 다른 쿼리를 수행 할 수 있습니다 (예 : "가장 최근 메시지 20 개를 구하십시오").

가장 큰 단점은 새 사용자는 채팅에 자주 참여할 것이며 회의에 참여할 때까지 전체 채팅 기록을 보려는 경우 많은 수의 데이터베이스를 읽게됩니다. 실재로, 그러나, 나는 실생활에서 그것이 얼마나 자주 일어날 지 모른다. 그리고 페이징을 사용하여 과거의 대화를 일괄 적으로 잡아서 이것을 완화시킬 수있다.