올바르게 쿼리하기 위해 데이터베이스를 구조화하는 방법에 대한 조언이 필요합니다. 데이터베이스의 구조가 모든 것으로 이해되었지만 올바르게 사용하고 있는지 확신 할 수 없습니다.Firebase 데이터 카스트 구조 어드바이스
기본적으로 내 앱은 API에서 데이터를 검색하여 목록보기에 표시합니다. listview의 모든 항목 (newspost)은 firebase 사용자의 주석을 가질 수 있습니다.
그래서 "NewsPost", "User"및 "Comment"모델이 이렇게 생겼습니다. '
NewsPost.class
private String id;
private String date;
private String title;
private String commentsNumber;
private List<Comment> comments;
private String imageUrl;
User.class
private String userName;
private String userAvatar;
private String firstName;
private String lastName;
private String eMail;
Comment.class
private UUID uuid;
private String postId;
private String message;
private String postDate;
private String userAvatar;
private String userName;
그래서 이것은 내가 그것을 저장하기 위해 시도하는 방법이다 :
을 그리고 이것은 사용자가의 특정 newsPostItem에 대한 의견을 읽고 클릭 할 때 내가 코멘트를 얻기 위해 시도하는 방법이다 newsPostId를 쿼리 매개 변수로 사용하여 listView.
public void getComments(String postId) {
comments = new ArrayList<>();
Query query = databaseReference.child("comments").orderByChild(postId).equalTo(postId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot issue : dataSnapshot.getChildren()) {
Comment comment = issue.getValue(Comment.class);
comments.add(comment);
}
Log.d("GETCOMMENTS", "SNAPSHOT EXISTS");
view.onCommentsLoaded(comments);
}
else{
view.onCommentsLoaded(comments);
Log.d("GETCOMMENTS", "SNAPSHOT NOT EXISTS");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
view.onCommentsLoaded(comments);
Log.d("GETCOMMENTS", databaseError.getMessage());
}
});
}
내 질문은, amidoinitrite입니까?
내가 유일한 사용자이기 때문에 이번 달 경고 제한 (10GB)이 다운로드되는 제한 사항이 있습니다.
도움을 주시면 감사하겠습니다.
사이드 노트 : userAvatar는 데이터베이스의 바이트 []에 저장됩니다. 좋지 않습니까?
원하는 데이터를 얻을 수 있었습니까? –
@AlexMamo 예, 아니요. 쿼리를 사용하면 스냅 숏이 존재하지 않습니다. dbref를 사용하면 주석을 얻지 만 firebase db의 큰 요청에 대해 불평합니다. 1 명의 사용자를 위해 한달 내에 거의 10GB의 다운로드를 사용했기 때문에 뭔가가 분명히 심하게 구조되었습니다 ... – JoSem