저는 Firebase/swift 초보자이며 .indexOn을 사용하여 서버의 노드 집합을 정렬하려고합니다. 나는 SO와 문서를 검색하여 규칙을 작성했지만 신속한 코드가 색인을 사용하기위한 올바른 형식으로 고민하고 있습니다.데이터베이스를 정렬하려면 .indexOn을 사용하십시오.
내 가정은 .indexOn 규칙을 사용할 때 반환 된 스냅 샷은 해당 인덱스를 사용하여 결과를 정렬한다는 것입니다. swift에서 .queryOrderedByChild ("title")을 사용함으로써 인덱스를 생성 할 때의 서버 측 성능 이점을 무효화합니다. 이 가정이 부정확하면 저를 시정하십시오.
{
"rules": {
".read": true,
".write": true,
"users": {
"$userid": {
"messages": {
".indexOn": ["title"]
}
}
}
}
}
가 여기 내 SWIFT 코드입니다 :
{
"users": {
"GkdjgdBJh1TxuAzIPezLWRouG9f2": {
"messages": {
"-KM0crettRl-RLQQdmMQ": {
"body": "Anyone want a bit of body string?",
"title": "5 Another title string",
},
"-KM0dhkChY6ZQ2QzuPlC": {
"body": "This is a short body string",
"title": "1 A lovely title string",
},
"-FQ0dhkChY6ZQ2Qzu3RQv": {
"body": "Short and sweet body string",
"title": "3 I should be in the middle",
}
}
}
}
}
가 여기 내 규칙 JSON입니다 : 여기
내 중포 기지 DB 구조의 단순화 된 조각의if let user = FIRAuth.auth()?.currentUser {
// user is logged in
// *** I think this is the line with the issue ***
FIRDatabase.database().reference().child("users").child(user.uid).child("messages").observeEventType(.Value, withBlock: { (snapshot) in
messageArray = []
if let dictionaryOfMessages = snapshot.value as? [String: AnyObject] {
for messageKey in dictionaryOfMessages.keys {
messageArray.append(Message(json: JSON(dictionaryOfMessages[messageKey]!)))
// set the messageId
messageArray[messageArray.count - 1].messageId = messageKey
}
}
// return the data to the VC that called the function
success(messages: messageArray)
}) { (error) in
// Handle the Error
}
} else {
// return some generic messages about logging in etc.
}
모든 제안을 어떻게 할 수 내 Swift 코드를 수정하여 색인을 사용하거나 잘못 되었다면 색인을 수정하십시오.
귀하의 질문에 완전히 명확하지 않습니다. 색인을 추가 한 후 성능에 부정적인 영향을 미치고 있습니까? 또는 결과가 잘못 표시됩니까? –
안녕하세요 @ FrankvanPuffelen - 나는 조금 혼란스러워하므로 초보자입니다. 내 결과는 현재 색인에 따라 정렬되지 않고 Firebase에 저장된 순서대로 표시됩니다. 필자는 문서에서 .indexOn을 사용하여 서버에서 정렬하는 것이 더 낫다는 것을 알았으므로이 단계에서 성능에 대해 언급 할 수 없도록 (데이터 세트는 꽤 커질 수 있습니다) 앞쪽으로하기로 결정했습니다. – James
OK, 알겠습니다. 나는 대답을 쓸 것이다. 미래의 질문에 대해서는 잘못된 부분 만 언급하는 것이 가장 좋습니다. 배열의 요소가 예상 한 순서대로 정렬되지 않은 경우 색인을 사용하면 성능에 미치는 영향은 부적절합니다. –