2016-10-31 5 views
0

사용자가 게시 할 수있는 프로젝트를 진행 중입니다. 그러나 firebase 데이터베이스 구조가 효율적인지 궁금합니다. 아래는 내 데이터베이스가 지금까지 어떻게 생겼는지 보여줍니다. 나는 게시물 아이가 사용자가 게시 할 모든 게시물을 포함하고 있습니다. 각 사용자는 posts 명의 자녀를 uid에 두어 자신의 게시물을 추적 할 수 있습니다. 내 데이터를 구성하는 더 좋은 방법이 있습니까? 또는 나는 가기 좋습니까? 모든 조언을 부탁드립니다! NoSQL에 데이터 작업내 firebase 데이터베이스를 구성하는 가장 좋은 방법

{ 
"posts" : { 
    "-KVRT-4z1AUoztWnF-pe" : { 
    "caption" : "", 
    "likes" : 0, 
    "pictureUrl" : "https://firebasestorage.googleapis.com/v0/b/cloub-4fdbd.appspot.com/o/users%2FufTgaqudXeUciW5bGgCSfoTRUw92%2F208222E1-8E20-42A0-9EEF-8AF34F523878.png?alt=media&token=9ec5301e-d913-44ee-81d0-e0ec117017de", 
    "timestamp" : 1477946376629, 
    "writer" : "ufTgaqudXeUciW5bGgCSfoTRUw92" 
    } 
}, 
"users" : { 
    "ufTgaqudXeUciW5bGgCSfoTRUw92" : { 
     "email" : "[email protected]", 
     "posts" : { 
      "-KVRT-4z1AUoztWnF-pe" : { 
       "timestamp" : 1477946376677 
      } 
     }, 
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/cloub-4fdbd.appspot.com/o/profile_images%2F364DDC66-BDDB-41A4-969E-397A79ECEA3D.png?alt=media&token=c135d337-a139-475c-b7a4-d289555b94ca", 
     "username" : "Test1" 
     } 
    } 
} 
+0

데이터를 구성하는 유일한 최선의 방법은 없습니다. 이 모든 것은 앱에서 데이터를 어떻게 사용 하느냐에 달려 있습니다. [NoSQL 데이터 모델링] (https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/)에서이 기사를 읽는 것이 좋습니다. –

답변

0

, 당신의 필요가 몇 가지 돌봐 : - 너무 깊은 수 으로

  • 평평하게 당신의 자료 구조를 데이터를 중첩

    • 사전 선호
    • 보안 규칙은 [중포 기지는]

    는이 구조를보십시오 : -

    users:{ 
        userID1: {..//Users info.. 
          posts:{ 
           postID1: true, 
           postID2: true, 
           postID3: true, 
            } 
           }, 
        userID2: {..//Users info..}, 
        userID3: {..//Users info..}, 
        userID4: {..//Users info..}, 
        }, 
    posts: { 
    userID1 :{ 
        postID1: {..//POST CONTENT }, 
        postID2: {..//POST CONTENT }, 
        postID3: {..//POST CONTENT }, 
        } 
    
        } 
    
  • 0

    데이터가 평평하고 얕은하십시오. 단순히 관련이있는 노드 아래에 데이터 분기를 중첩하지 않고 데이터를 복제하여 트리를 얕게 유지하는 데 도움이되는 경우 데이터를 복제하십시오.

    목표는 필요한 데이터 만 반환하는 빠른 요청을하는 것입니다. 트리가 변경되고 클라이언트 측 리스너가 노드를 시작하고 모든 자식이 클라이언트에 전달 될 때마다이를 고려하십시오. 트리 전체에서 데이터를 복제하면 최소한의 데이터로 빠른 요청을 처리 할 수 ​​있습니다.

    데이터를 평탄화이 프로세스는 "비정규"및 중포 기지 문서의이 섹션으로 알려져 않습니다 제공 지침의 좋은 작업 : 당신의 예에서

    https://firebase.google.com/docs/database/android/structure-data

    나는 메타 데이터는 아래에 중첩 게시물을 참조 위 성장하는 중첩 목록 인 "users". "사용자"아래에서 무언가가 변경 될 때마다 청취자는 클라이언트를 업데이트하기 위해 발사하고 모든 데이터는 각 응답에서 전송됩니다. 대신 작가의 uuid를 기반으로 "posts"노드에서 게시물 데이터를 가져 오는 것을 고려할 수 있습니다.

    +0

    당신은 고유 한 postId로 게시물 데이터를 가져 오는 대신 작성자의 uid로 가져 오는 것을 의미합니까? 그런 다음 사용자가 두 개 이상의 게시물을 가지고 있다면 게시물을 어떻게 구별 할 수 있습니까? –

    +0

    다른 루트 대신 "posts"를 사용하면 작성자의 uuid를 게시물이있는 노드로 복제 할 수 있습니다. 이렇게하면 가져 오기가 "이 사용자의 모든 게시물을 모두 포함하여이 사용자의 모든 것을 가져옵니다"가 아닌 "이 사용자의 모든 게시물 가져 오기"입니다. 게시물에 대해 RecyclerView를 사용하는 것이 더 간단 할 것입니다. – Lucy

    관련 문제