1

私はspatialindex(http://libspatialindex.github.com/)ライブラリを使用してRツリーをバルクロードしています:

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;

ツリーにはノードが1つだけあります(ツリーの出力は次のとおりです)。

    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

私は何を間違えますか?ツリー全体をディスクからロードしないのはなぜですか?

4

2 に答える 2

1

変更をディスクに同期しなかったのではないでしょうか。

さらに、通常はディスク上にツリーを実装し、最初のアクセスでツリーを完全に読み取ることはありません。したがって、現時点では、正確な統計を報告することはできません。

または多分あなたbulkLoadRTreeは使用しませんfileInMem

于 2012-11-08T20:04:43.653 に答える
0

fileInMemを削除して、ページがさらにディスクに送り返され、さらに*diskを削除するために送り返されるようにする必要があります。ディスクを削除する前に、次の行を追加する必要があります。

delete fileInMem
于 2012-11-22T08:25:44.693 に答える