Ich habe ein Leistungsproblem beim Aktualisieren einer Tabelle in Oracle Spatial 11G, während 63.000.000 Punkte in das WKT-Format konvertiert werden. Ich habe auch einen Vergleich mit Postgres gemacht. Sowohl Postgres als auch Oracle werden auf zwei virtuellen Maschinen ausgeführt, die auf demselben Server gehostet werden.
Postgres: Prozessoren 12, RAM 64 GB
create table alldata(geom geometry(Point, 4326));
alter table alldata add column wkt4326 varchar(100);
update alldata set wkt4326 = St_AsText(geom) -- 25 minutes
Oracle 11G: Prozessoren 12, RAM 40 GB, pga + sga = maximal 8 GB
create table alldata(geom sdo_geometry); -- e.g.: SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(aLon, aLat, null), null, null)
alter table alldata add (wkt4326 varchar(100));
-- **Did not complete in a hour...**
update alldatafiltered set wkt4326 = SDO_UTIL.TO_WKTGEOMETRY(geom);
Warum übertrifft Postgres Oracle beim Aktualisieren von Tabellen? Welche Ursachen können die räumliche Leistung von Oracle beeinflussen?
Im Moment nutze ich keinen räumlichen Index.
UPDATE
ist eine sehr teure Operation für einen vollständigen Tabellenscan; Sie sollten einCREATE TABLE ... AS
Konstrukt verwenden.Antworten:
Oracle Spatial und Postgis haben ihre eigenen Vor- und Nachteile. Beim Umgang mit den Geodaten übertrifft Postgis Oracle Spatial immer. Ich habe in den letzten 2 Jahren an Oracle Spatial gearbeitet und bin kürzlich zu PostGIS gewechselt. Bei beiden habe ich einen großen Leistungsunterschied festgestellt.
Der Grund, warum es viel schneller arbeitet, liegt in der Analyse von Geodaten. In vielen Fallstudien wurde festgestellt, dass PostGIS 300 bis 400% schneller ist als Oracle Spatial.
PostGIS verwendet GEOS (Geometry Engine - Open Source) für die Geometrieanalyse, während Oracle Spatial über eine eigene Geometrie-Engine verfügt, die eine sehr geringe Analyse als GEOS aufweist.
Ich habe festgestellt, dass diese Fallstudie für den Leistungsvergleich zwischen PostGIS und Oracle Spatial sehr nützlich ist.
Nach meiner persönlichen Meinung und Erfahrung führt Open Source immer zu Proprietary in Performance.
quelle