2016-08-12 3 views
2

내 데이터는 내 firebase에서 이와 비슷합니다.firebase orderby 키와 페이지 넘김을위한 orderby 타임 스탬프

users: { 
-KOwKNCB5IiDBxY9FNzR: { 
    content: { blah blah }, 
    timestamp:1470964762934 

}, 
-KOwKNCB5IiDBxYsdsds: { 
    content: { blah blah }, 
    timestamp:1444964762934 
}, 
--HHiOwKNCB5IiDBxY9FN: { 
    content: { blah blah }, 
    timestamp:1579864762934 
} 
} 

이 두 가지의 차이점은 무엇입니까? I 데이터를 추가 할 때

  • ....orderByKey().startAt(starttime).endAt(endTime).limitToLast(10)
  • ....orderByChild("timestamp").startAt(starttime).endAt(endTime).limitToLast(10)

    • 는 I 푸시 REF 키를 사용했다. Firebase는 타임 스탬프 기반의 키를 사용합니다. 이 경우 아래 두 가지의 차이는 무엇입니까? 둘 다 같은 결과를 줄 것입니까? 어때?

    답변

    4

    아니요, 이들은 동일하지 않습니다. 예제의 키 기반 쿼리가 작동하지 않습니다.

    Firebase 키는 타임 스탬프에서 파생되지만 간단한 밀리 초 카운트 이상입니다. 키에 대해 임시 쿼리를 수행하려면 타임 스탬프를 키로 변환해야합니다. 이 알고리즘을 보여주는 GIST here이 있습니다.

    키 기반 쿼리의 타임 스탬프를 실제 키로 변환하면 두 쿼리가 동일해야합니다. 즉, 푸시 된 데이터의 키를 생성하기 위해 Firebase에서 사용하는 타임 스탬프가 사용자가 저장 한 timestamp과 일치하지 않을 수 있습니다 데이터에.

    그러나 성능상의 이유로 timestamp 속성의 경우 put an index이 필요합니다. 인덱스를 사용하면 키 기반 쿼리를 사용할 때 상당한 성능 이점이 있는지 여부를 확인하기 위해 몇 가지 테스트를 수행해야합니다.

    +0

    Firebase는 시계 오프셋을 고려해야합니다. Firebase가 서버와 통신하는 첫 번째 호출 후에 키를 생성 할 때 Firebase는 로컬 시스템과 Firebase 서버 간의 클록 오프셋을 고려합니다. – cartant