2012-11-06 3 views
1

내가 (http://libspatialindex.github.com/) 라이브러리 spatialindex와 함께 R 트리를 벌크로드하고 함께 :는 (재) 넣기 R 트리 spatialindex 라이브러리

string baseName = "streets"; 
size_t capacity = 10 * 1024 * 1024; 
bool bWriteThrough = false; 
indexIdentifier = 0; 

IStorageManager *disk = StorageManager::createNewDiskStorageManager(baseName, 512); 
fileInMem = StorageManager 
    ::createNewRandomEvictionsBuffer(*disk, capacity, bWriteThrough); 

// bulkLoads my tree 
bulkLoadRTree(); 

cout << "tree info:" << endl; 
cout << *tree << endl; 

delete disk; 

다음에 대한 정보의 출력 내장 트리 : 지금

Dimension: 2 
    Fill factor: 0.7 
    Index capacity: 100 
    Leaf capacity: 100 
    Tight MBRs: enabled 
    Near minimum overlap factor: 32 
    Reinsert factor: 0.3 
    Split distribution factor: 0.4 
    Utilization: 69% 
    Reads: 1 
    Writes: 35980 
    Hits: 0 
    Misses: 0 
    Tree height: 4 
    Number of data: 2482376 
    Number of nodes: 35979 
    Level 0 pages: 35463 
    Level 1 pages: 507 
    Level 2 pages: 8 
    Level 3 pages: 1 
    Splits: 0 
    Adjustments: 0 
    Query results: 0 

내가 디스크에 저장 한 내용을로드하려고 :

IStorageManager *ldisk = StorageManager::loadDiskStorageManager(baseName); 
SpatialIndex::StorageManager::IBuffer* fileLoadBuffer = StorageManager 
    ::createNewRandomEvictionsBuffer(*ldisk, capacity, bWriteThrough); 

id_type id = 1; 
tree = RTree::loadRTree(*fileLoadBuffer, id); 
cout << *tree << endl; 

과 나무가있다 단 하나의 노드 (트리의 출력은 :)

Dimension: 2 
    Fill factor: 0.7 
    Index capacity: 100 
    Leaf capacity: 100 
    Tight MBRs: enabled 
    Near minimum overlap factor: 32 
    Reinsert factor: 0.3 
    Split distribution factor: 0.4 
    Utilization: 0% 
    Reads: 0 
    Writes: 0 
    Hits: 0 
    Misses: 0 
    Tree height: 1 
    Number of data: 0 
    Number of nodes: 1 
    Level 0 pages: 1 
    Splits: 0 
    Adjustments: 0 
    Query results: 0 

내가 뭘 잘못 했니? 디스크에서 전체 트리를로드하지 않는 이유는 무엇입니까?

답변

1

디스크가 변경 되었습니까?

일반적으로 디스크에 디스크를 구현하고 이 아니기 때문에은 처음 액세스 할 때 완전히 읽습니다. 따라서 지금은 정확한 통계를보고 할 수 없습니다.

bulkLoadRTreefileInMem을 사용하지 않습니다.

+0

변경 사항을 디스크에 동기화하려면 개체를 삭제해야합니다. – arthur

0

하나는 fileInMem을 삭제해야 페이지가 디스크로 다시 보내지고 더 이상 디스크 *를 삭제하기 위해 다시 전송됩니다. 디스크를 삭제하기 전에이 줄을 추가해야합니다.

delete fileInMem