Firebase DataBase Rule
2021. 9. 29. 17:30ㆍCloudPlatform/Firebase
728x90
반응형
firebaseDataBaseRule
파이어베이스 데이터베이스에 대해 정리한 내용(NoSql)
https://www.youtube.com/watch?v=WacqhiI-g_o&list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s
RDBMS의 내용의 경우 최대한 간결하게 담았습니다.
Rules Types
- .read: 데이터가 사용자들이 읽을 수 있도록 허용
- .write: 데이터가 쓰여딜 수 있게 허용
- .validate : 하위 속성이 있는지 여부와 데이터 유형이 올바로 형식화 된 값의 모양을 정의
- .indexOn : ordering 과 쿼리를 지원하기 위해 인덱스 할 자식을 지정
RDBMS 와 NOSQL의 완전성과 유연성
- RDBMS 완전성 up, 유연성 down
- NOSQL 완전성 down, 유연성 up
RDBMS의 테이블과 외부키
- 외부키로 서로의 테이블간 연결함
Nosql의 Json방식의 테이블 정의
"users" : {
"1":{ /*1은 David의 기본키*/
"name":"David"
}
"9" : {/*9은 Alice의 기본키*/
"name":"Alice"
}
},
"events": {
"fm": {/*fm은 파이어베이스 밋업(MeetUp)이라는 이벤트입니다.*/
"name" : "Firebase Meetup",
"date" : 983275235320
}
},
"eventAttendees": {
"fm": {
"1" : "David",
"9" : "Alice"
}
}
}
const events = db.child('events/fm');
const attendees = db.child('eventAttendees/fm');
events.on('value',snap=>{
//render data rto Html
});
attendees.on('child_added',snap=>{
//append attendees to list
});
쿼리 작성하는 방법
- 뷰에 맞춰서 데이터를 구조화하는 경향이 있음
- 이미 모든 필요한 부분들이 데이터베이스에 조직화된 상태로 준비
RDBMS와 NOSQL의 검색 기능 만들기 비교
- 이거 잘되있다. 역시 킹갓 구글 ,,,
- 이런식으로 비교되니깐 머리에 쏙쏙 들어오네 ㅎ
select * from Events /*첫째 테이블에서 컬럼을 SELECt함*/
WHERE Name =="Firebase Meetuo"; /* where문을 써서 조건 둠*/
const db = firebase.database();
const events = db.child('events');
eventsRef.orderFunction().queryFunction();//순서를 정하는 orderFunction() 함수를 써서 제어, 좀더 세세한 제어는 queryFunction()-> 쿼리함수 사용
eventsRef.orderByKey().limitToFirst(10); //orderByKey() 순서를 정하는 함수,limitToFirst(10) 쿼리제한은 10개
/*orderBy~: 문자열로만 된 자식키에 대한 쿼리를 행할 수있음 =
orderByKey() : 개수를 제한하거나 기본적인 페이징 작업을 할 때 사용합니다.
orderByChild('child_property') : sql상에서의 where과 비슷 , 가령 이름,연령 등과 같은 자식 속성을 지정한 후 그 값에 대한 쿼리 짜기 가능
orderByValue() : 모든 자식이 값을 기준으로 정렬됨
1. 자식키들은 SQL 데이터베이스에서의 기본키와 비슷(okㅎㅎ)
//범위 지정
startAt('value')
endAt('value')
//where 문과 비슷
equalTo('child_key')
//상위 10줄
limitToFirst(10)
//하위 10줄
limitToLast(10)
모두 결합 가능 (워후 유용하겠군)
*/
const db = firebase.database();
const events = db.child('events');
const query = events.orderByChild('name')
.equalTo('Firebase Meetup')
.limitToFirst(1);
//이런식으로 결합가능
//문장이해 해보자
/*
{
"users":{
"1": {
"name": "David",
"email": "deve@gmail.com",
"age":99,
"location":"SF",
"age_location":"99_SF"
},
"9": {
"name": "Alice",
"email": "alice@gmail.com",
"age":28
"location":"Berlin",
"age_location":"28_Berln"
}
}
*/
once와 on의 차이점
- once는 데이터 한번만
- on은 지속적으로
비정규화와 정규화
-정규화는 중복된 데이터를 줄이는 것 :RDBMS의 가장 큰 특징
비정규화는 데이터를 중복시키는 것: firebase의 특징
- 즉 쿼리를 줄이기 위해 데이터를 중복 시킴
- 대체적으로 뷰에 따라서 데이터의 구조를 만든다. 아래의 예시 참고
"SF": { "fm":{ "name":"Firebase Meetup", "timestamp": "12333", "location" :"SF" }, }, "BER":{ "fbs":{ "name":"Firebase Dev", "timestamp" : "1635", "location" :"BER" } } }
locationEvent를 사용하여 SF,BER을 키로 생각하고 location정보에 SF와 BER저장 그래서 밑에 처럼 사용한다.
const ref= firebase.database()l,ref();
const berEvents = ref.child('locationEvents/BER');
berEvents.on('child_added',snap => {
});
데이터의 일관성
- 비정규화를 하면 데이터의 중복을 줘서 복잡한 쿼리를 짜지 않아도 됨'
- 하지만 문제가 생김 데이터가 바뀌었을 때 데이터의 일관성이 사라질 수도 있음
- 이것을 해주는 것이 다중 경로 갱신
다중 경로 갱신
- 비정규화와 일관성을 연결하는 것
- lookuptable을 만들면됨
"userEvents": {
"$uid":{
"$eventId":true
}
}
- 위의 코드 내용이 아래의 코드 내용
"userEvents": { "1":{ "fm":true, "other":true, "coolEvent":true, } }
728x90
반응형