Ich führe genau die gleiche Python-Funktion aus, eine als PostgreSQL PL/Python und die andere außerhalb von PostgreSQL als normales Python-Skript.Wie steht PostgreSQL PL/Python im Vergleich zu Python in Bezug auf die Leistung?
Überraschenderweise, wenn ich die PostgreSQL PL/Python mit select * from pymax7(20000);
aufrufen, dauert es im Durchschnitt 65 Sekunden, während, wenn ich das übliche Python-Skript python myscript.py 20000
aufrufen dauert es durchschnittlich 48 Sekunden. Die Durchschnittswerte wurden berechnet, indem die Abfragen und Skripts zehn Mal ausgeführt wurden.
Sollte ein solcher Unterschied erwartet werden? Wie vergleicht Python innerhalb des PostgreSQL-RDBMS (PL/Python) mit Python in Bezug auf Performances?
Ich benutze PostgreSQL 9.1 und Python 2.7 auf Ubuntu 12.04 64bits.
PostgreSQL PL/Python:
CREATE FUNCTION pymax7 (b integer)
RETURNS float
AS $$
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987)
return a
$$ LANGUAGE plpythonu;
Python:
import time
import sys
def pymax7 (b):
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987) # keeping Python busy
return a
def main():
numIterations = int(sys.argv[1])
start = time.time()
print pymax7(numIterations)
end = time.time()
print "Time elapsed in Python:"
print str((end - start)*1000) + ' ms'
if __name__ == "__main__":
main()
Vergleich mit anderen PL-Sprachen wäre fairer. –
Da PL/x den Interpreter für x (x = Python; Perl; etc) aufruft, ist es nicht ein interessanter Vergleich, um zu beurteilen, wie viel Overhead PL/x über x hat? Es sei denn, ich verpasse etwas? –
Es wird den Interpreter nicht ausführbar nennen, es bindet die Zielsprache mit Hilfe von Einbettungsmechanismen (im Fall von Python, denke ich dynamisch an Python-Bibliotheken). –