2012-11-06 40 views
1

我與spatialindex bulkloading的R樹(http://libspatialindex.github.com/)庫:(Re)的裝載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

難道你也許不是同步更改到光盤?

另外,通常會執行樹上的磁盤,並且而不是在第一次訪問時完全讀取它。所以在這一點上,它不能報告準確的統計數據。

或者,也許你的bulkLoadRTree不使用fileInMem

+0

必須刪除對象才能將更改同步到光盤。 – arthur

0

一個人必須刪除fileInMem使頁面被進一步送回盤,並進一步送回刪除*磁盤。在刪除磁盤之前需要添加此行:

delete fileInMem