Firestore 하위 수집 대 어레이
먼저, 저는 파이어스토어가 어떻게 작동하는지 알고 있으며, 좋은 구조를 위한 다양한 접근 방식을 평가하는 데 많은 시간을 보냈습니다.여전히 저는 다음 시나리오를 고려하고 있습니다.
알려진 레시피의 데이터베이스가 있습니다.사용자들은 레시피를 추가할 수 있지만, 그것들은 단지 일부 변형이 아닌 실제 레시피임을 확인해야 합니다.따라서 모든 사용자는 사용자가 생성한 레시피 목록에서 레시피를 선택하여 요리하는 방법(또는 새로운 레시피를 추가하는 방법)을 알 수 있습니다.
이제 저는 사용자들이 영수증 목록을 다른 사람들과 공유하기를 원하지만, 이것이 Firestore를 사용하여 어떻게 가장 잘 수행될 수 있는지 확신할 수 없습니다.비결은 모든 요리법을 한 번에 보여주고 페이지를 작성하고 싶지 않다는 것입니다.
저는 현재 두 가지 가능성을 평가하고 있습니다.
하위 컬렉션
사용자가 목록을 공유할 때마다 해당 목록을 보는 사용자는 많은 양의 문서 읽기를 초래할 수 있는 전체 레시피 목록을 로드해야 합니다(현실적으로 ~50, 매우 드문 경우에는 1000).
찬성:
- 보다 자연스러운 구조
- 유지관리가 더 용이함(예: 레시피 삭제, 특정 레시피가 있는지 확인)
- 필드를 더 쉽게 추가할 수 있습니다(예: 작성 시간, 주석, 개인 등급 등).
단점:
- 장기적으로 많은 양의 읽기가 발생할 수 있음
배열
나는 알려진 모든 레시피(아이디와 이미지)를 저장할 수 있었습니다.URL)는 배열 내에서 사용자 문서(또는 단일 하위 문서 "알려진 레시피") 내에 있습니다.이 배열은 다음 형식일 수 있습니다.
recipesKnown: [{rid: 293ndwa, imageURL: image1.com, timeAdded: 8371201332},
{rid: 9012831, imageURL: image1.com, timeAdded: 8371201871},
{rid: jd812da, imageURL: image1.com, timeAdded: 8371201118},
...
]
찬성:
- 다른 사용자의 목록을 보려는 사용자가 있을 때마다 하나의 문서만 읽으면 됩니다.
- 사용자 목록을 읽는 것이 더 빠를 수 있습니다.
단점:
- 특정 레시피를 업데이트하는 것은 어렵습니다(예: 누군가 이미지를 변경하기를 원합니다).URL: 목록을 로컬로 변경하고 전체 문서를 서버에 업데이트로 보내야 합니다. 배열의 요소를 하나만 변경할 수는 없기 때문입니다.)
- 사용자가 약 1,000개의 조리법을 가지기로 결정하면(이것은 절대 일어나지 않을 수도 있지만 그럴 수도 있습니다), Firestore 제한의 1MiB 제한에 도달할 수 있습니다.가능한 해결 방법은 별도의 문서를 작성하고 이러한 두 개의 배열을 이 두 개의 문서로 분할하는 것입니다.
저는 Subcollections에 대한 아이디어가 이 문제에 대한 "깨끗한" 해결책인 것처럼 보이지만, 아마도 저는 왜 그러한 해결책 중 하나가 다른 해결책보다 우월한지에 대한 몇 가지 주장을 놓치고 있는 것 같습니다.
가장 일반적인 쿼리는 다음과 같습니다(중요도에 따라 내림차순).
- 사용자가 요리할 수 있는 요리법
- 사용자가 요리할 수 있는 레시피를 사용자 목록에 추가
- 특정 레시피를 요리할 수 있는 사람 (Recipe -> Cooks 서브컬렉션 있음)
- 사용자가 요리할 수 있는 기존 레시피 업데이트
질문에 대한 대답은 달성하고자 하는 확장성 수준에 따라 달라집니다.
저장할 하위 데이터의 양이 제한적이고 매우 낮은 경우에는 문서 읽기 수를 줄일 수 있으므로 어레이를 사용해야 합니다. 따라서 비용이 절감됩니다.
하위 데이터가 시간이 지남에 따라 "무제한" 증가해야 하는 경우 하위 수집을 사용해야 합니다.
어떤 방향으로도 확장할 수 없는 데이터베이스(개념 증명, 소규모 기업 등)를 구축하는 경우에는 보다 편리한 방법을 사용하십시오.
같은 질문을 조사하고 있습니다
질문 중 하나는 문서에 저장된 데이터가 문서의 한계치인 1MB를 초과할 수 있는지 여부입니다.일반 텍스트로 1MB로 얼마나 저장할 수 있는지 조금 조사해보면 정말 많습니다.하지만 만약 그것이 믿을 수 없을 정도로 더 크다면 결국 추락할 것입니다.따라서 만약 당신이 큰 방식으로 하위 컬렉션을 생각한다면,
Firebase 요소 논리를 사용해야 한다면 하위 컬렉션이 답이 될 것입니다.
여전히 중요한 점은 데이터를 끌어낸 것이라고 생각합니다.사용자에게 전화하면 MB의 데이터를 직접 꺼낼 수 있습니다.대신 하위 컬렉션을 사용하면 로드되지 않으며, 로드하더라도 로드가 느려질 수 있습니다.
하위 수집을 수행하는 유형의 설정인 것 같습니다.
key
인 는입니입니다.collection
의 사기꾼/프로
key
중복을 방지하는 데 도움이 될 수 있지만, 이를 위해서는 중복의 정의를 고려해야 합니다(변경될 수 있음).
array
의 no-key 동작은 자동 ID를 통해 에뮬레이트될 수 있습니다.
p.s. @토마스의 질문에 대한 찬성/반대 목록은 꽤 도움이 되었습니다.
언급URL : https://stackoverflow.com/questions/55926950/firestore-subcollection-vs-array
'bestsource' 카테고리의 다른 글
EQATEC 프로파일러를 사용하여 ASP.NET 웹 사이트 프로파일링 (0) | 2023.06.18 |
---|---|
막대 그림에 대해 R의 x축 레이블 회전 (0) | 2023.06.18 |
파생 클래스 속성 값이 기본 클래스 생성자에 표시되지 않는 이유는 무엇입니까? (0) | 2023.06.18 |
여러 패턴이 있는 문자 벡터를 사용한 grep (0) | 2023.06.18 |
Wordpress 이미지 업로드에 연결 (0) | 2023.06.18 |