2012-10-25 15 views
5

ich die spatialindex Bibliothek von http://libspatialindex.github.com/Wahl der Parameter für R * -Baum mit SpatialIndex Bibliothek

mit I im Hauptspeicher einen R * -Baum erschaffe:

size_t capacity = 10; 
bool bWriteThrough = false; 
fileInMem = StorageManager 
    ::createNewRandomEvictionsBuffer(*memStorage, capacity, bWriteThrough); 

double fillFactor = 0.7; 
size_t indexCapacity = 10; 
size_t leafCapacity = 10; 
size_t dimension = 2; 
RTree::RTreeVariant rv = RTree::RV_RSTAR; 
tree = RTree::createNewRTree(*fileInMem, fillFactor, indexCapacity, 
    leafCapacity, dimension, rv, indexIdentifier); 

Dann bin Einfügen ich eine große Anzahl der Bounding Boxes, derzeit ca. 2,5 Mio. (Straßennetz von Bayern in Deutschland). Später werde ich versuchen, alle Straßen Europas einzufügen.

Was sind eine gute Wahl der Parameter für den Storage Manager und Rtree? Meistens verwende ich den Baum, um die nächstgelegenen Straßen zu einer bestimmten Abfrage zu finden (Bbox-Schnittpunkt).

+0

+1 Weil ich noch nie zuvor von einem R * -Baum gehört habe, und es ist ziemlich interessant. http://en.wikipedia.org/wiki/R*_tree –

+0

Nun, es ist eine ziemlich Standard-Index-Struktur, die verwendet wird, um Raumbereichsabfragen zu beantworten (geben Sie mir alle Objekte, die in eine bestimmte Rechteckabfrage fallen) und Nearest-Neighbor-Abfragen (Gib mir die k-nächsten Objekte zu meiner Punktabfrage). Wenn Sie interessiert sind, sehen Sie sich räumliche Indizes im Allgemeinen an: http://en.wikipedia.org/wiki/Spatial_database – arthur

Antwort

3

Da Ihre Daten statisch sind, kann eine gute Massenlast für Sie arbeiten. Die beliebteste (und eine ziemlich einfache) Blokload ist Sort-Tile-Recursive. Es ist jedoch etwas um Punktdaten entworfen. Wenn Sie räumliche Objekte einfügen, funktioniert es möglicherweise genauso gut oder auch nicht.

Wenn Sie eine Massenlast verwenden, ist es nicht mehr ein R * -Baum, sondern ein einfacher R-Baum.

Kapazität 10 klingt weg zu wenig für mich. Sie wollen eine viel größere Fan-out. Aber Sie müssen Benchmark, das ist Datensatz und Abfrage abhängig, was gut ist. Ich würde definitiv 100 oder mehr versuchen.

+0

Vielen Dank für die Kommentare und Informationen. Ich habe bereits die beiden Kapazitätswerte auf 100 erhöht. Dadurch entsteht ein Baum der Höhe 3. Ich werde versuchen, mit den Werten zu experimentieren und sie hier in ein paar Tagen zu posten. – arthur

+0

Laut Mario erklärt das in http: // lists. gispython.org/pipermail/spatialindex/2013-June/000354.html, der loose loaded tree ist weder einfacher R-tree, noch R * -tree. – mloskot

+0

Dann ist diese Mail ungenau. Das Massenladen eines R-Baums mit STR erzeugt nicht den exakt gleichen * Baum wie ein inkrementell geladener R-Baum (aus offensichtlichen Gründen, z. B. ist die Füllrate viel höher als bei einem inkrementell geladenen Baum), aber dennoch ist es ein Gültiger R- * und * R * -Baum und können beide auf die gleiche Weise abgefragt und aktualisiert werden. –