2011-11-07 6 views
3

나는 키가 64 비트 해시이고 값이 double 인 레코드 (키 - 값)를 저장하기 위해 leveldb을 사용하고 있습니다. 유추하기 : 64 비트 해시는 고객의 고유 ID이고 이중은 계정 잔액 (계정에 얼마나 많은 돈이 있는지)이라고 생각하십시오. 계정 잔액별로 데이터베이스를 정렬하고 가장 높은 계정 잔액을 가진 고객을 먼저 나열하려고합니다. 그러나 데이터베이스는 메모리에 맞지 않으므로 정렬을 위해 다른 방법을 사용해야 만 계정 잔액별로 정렬 할 수 있습니다.값으로 LevelDB를 정렬하는 방법

나는 STXXL을 사용하려고 생각하고 있지만 데이터베이스의 복사본을 하나의 플랫 파일로 만든 다음 STXXL을 사용하여 외부 정렬을 수행해야합니다. 다른 단일 플랫 파일로 다시 병합). 데이터를 정렬하는 더 좋은 방법이 있습니까? 아니면 STXXL 정렬을 사용해야합니까?

답변

1

몇 개의 항목이 있습니까? 부호없는 32 비트 정수를 원래 배열을 정렬하는 방법을 식별하는 데 사용할 수있는 색인 (4,294,967,296 색인 허용)으로 사용할 수 있습니까?

즉 32 비트 색인 및 계정 잔액 쌍을 만들고 잔액을 정렬 한 다음 32 비트 색인을 사용하여 원본 데이터의 순서를 결정하십시오.

+0

그렇다면 64 비트 인덱스도 사용할 수 있다고 생각합니까? 열쇠는''일 수 있습니다 ... ... – Kiril

+0

전체 db를 메모리에로드 할 수 없다고 말한 것 같습니까? 나는 정보를 줄이는 방법으로 32 비트 인덱스를 제안했다. 실제로 64 비트 해시 및 양보다 많은 정보가 있습니까? –

+0

맞습니다. 메모리에로드 할 필요가 없습니다. 제안하면 다른 LevelDB 인스턴스를 정렬에 사용하라는 메시지가 표시되지만 두 번째 LevelDB 인스턴스에서 다른 키 (') 및 값 없음 . 따라서 키는 두 배로 정렬되고 중복되는 두 배가 있으면 (그러면있을 것입니다), 키의 두 번째 부분이 재생되고 원래의 고유 한 해시로 정렬됩니다. 이렇게하면 데이터를 한 번만 복사해야합니다. – Kiril

관련 문제