In meiner Datenbank liegen Gebäudemodelle die in Kacheln eingeteilt sind!
Ergebnisse (Zeit gemessen mit web.profiler)
Wenn ich eine 400m Kachel (4137 rows) abfrage dauert die Ausführung und Übertragung zum Browser ca. 0.26 Sekunden.
Wenn ich eine 500m Kachel (6241) abfrage braucht die Ausführung und Übertragung zum Browser ca. 14 Sekunden.
Klar das die 500m Kachel länger braucht durch die höhere Anzahl von rows in der DB! Aber von 0,26 sekunden auf 14????
Ist das normal? Ich finde den Unterschied zu krass....
Mein Programm sieht folgendermaßen aus:
Code: Alles auswählen
import cx_Oracle
import json
import web
urls = (
"/", "index",
"/grid", "grid",
)
app = web.application(urls, globals(),web.profiler )
web.config.debug = True
connection = cx_Oracle.Connection("TEST_3D/limo1013@10.40.33.160:1521/sdetest")
typeObj = connection.gettype("MDSYS.SDO_GEOMETRY")
class index:
def GET(self):
return "hallo moritz "
class grid:
def GET(self):
web.header('Access-Control-Allow-Origin', '*')
web.header('Access-Control-Allow-Credentials', 'true')
web.header('Content-Type', 'application/json')
cursor = connection.cursor()
cursor.arraysize = 6300 # default = 50
cursor.execute("""SELECT a.id , c.geometry, d.Classname FROM building a, THEMATIC_SURFACE b, SURFACE_GEOMETRY c, OBJECTCLASS d WHERE a.grid_id_400 = 4158 AND a.id = b.BUILDING_ID AND b.LOD2_MULTI_SURFACE_ID = c.ROOT_ID AND c.GEOMETRY IS NOT NULL AND b.OBJECTCLASS_ID = d.ID""")
def geometry_to_points(obj):
return zip(*[iter(obj.SDO_ORDINATES.aslist())]*3)
result = []
for id, geometry, classname in cursor:
result.append({
"building_nr": id, "geometry": {
"type": "polygon",
"coordinates": [geometry_to_points(geometry)],
}, "polygon_typ": classname,
})
return json.dumps(result)
# Aufruf der App
if __name__ == "__main__":
app.run(web.profiler)