UDFs in interpretierten Sprachen sind so gut wie immer langsamer als UDFs, die in C oder in integrierten Funktionen geschrieben sind, alle anderen Dinge sind gleich.
Jede Sprachbindung verfügt über einen anderen Code, um PostgreSQL mit der Sprache zu verbinden, mit unterschiedlichen Optimierungsgraden, unterschiedlichen Arten der Übergabe einiger Datentypen usw. Es gibt also durchaus Unterschiede. Es sollte nicht riesig sein, es sei denn, Sie übergeben einen Datentyp, der von einer Sprache ganz anders behandelt wird als von einer anderen, z. B. einer übergibt einen hstore
als Zeichenfolge und ein anderer konvertiert ihn in einen dict
.
Unklar, was "der Kontext" ist. Können Sie es für die "Echtzeit-Datenzuordnung" verwenden? Nun, hängt davon ab, was die Funktion tut und ob sie auf dem Server, auf dem sie ausgeführt wird, für die Clients, auf die sie ausgeführt wird, und für Ihre Anforderungen schnell genug ist. Wie lang ist ein Stück Schnur? Benchmark.
PL / PgSQL ist einfacher zu schreiben und bietet einen schnelleren Zugriff auf SQL. Im Allgemeinen ist es besser, wenn Sie ein wenig Logik um viel SQL wickeln müssen. Für mathematische Operationen und komplexe Algorithmen ist es sehr langsam, daher sollte rein rechnerischer Code in PL / PgSQL nach Möglichkeit zugunsten von C oder einer schnelleren prozeduralen Sprache vermieden werden.
Die Beschleunigung bei der erneuten Implementierung von PL / PgSQL-Code in C kann von vernachlässigbar bis über 1000-mal variieren. Es hängt alles davon ab, was der Code tatsächlich tut.
(Diese Art von Mehrfachfragen eignet sich nicht gut für Stack Exchange, da es schwieriger ist, eine endgültige Antwort zu erhalten.)
das ist ziemlich schwer zu sagen. Es hängt wirklich davon ab, was Sie tun. Zum Beispiel: PL / pgSQL ist wunderbar, wenn Sie große SQL-Anweisungen enthalten - es wird wirklich verrückt, wenn Sie alle Arten von Verzweigungen, Teilzeichenfolgenverwaltung und all das haben.
Sie müssen wirklich von Fall zu Fall testen.
quelle
Die Leistung hängt von der Hardware und der Komplexität Ihrer Funktionen ab. Ich habe eine Appliance erstellt, die auf einem kleinen 12-Core-Server und einer FusionIO-Karte lief (Gesamtkosten 10000 Euro) und ungefähr 2500 Transaktionen pro Sekunde mit 20 gleichzeitigen Benutzern durchgeführt. Jede Transaktion ruft 29 gespeicherte Prozeduren auf, um die Daten zu verarbeiten und einige nützliche Informationen an den Client zurückzugeben. Einige Funktionen führen nur eine Abfrage aus, andere einige Abfragen. Insgesamt werden ungefähr 200000 INSERT-, SELECT- und UPDATE-Anweisungen pro Sekunde ausgeführt.
Dies ist alles in PL / SQL, PL / pgSQL und PL / PerlU geschrieben. Und ich bin mir ziemlich sicher, dass das System noch schneller laufen kann, wenn (einige) Funktionen in C neu geschrieben werden.
In dieser Appliance kommt die meiste Leistung von der SSD-Karte. Auf einer einzelnen rotierenden Scheibe würden wir diese Leistung niemals erzielen. Günstige SSD-Laufwerke fallen ebenfalls aus, sie funktionieren eine Stunde lang (aufgrund des Zwischenspeicherns der RAID-Karte) und dann ist das Spiel vorbei. Die FusionIO-Karte ist teuer, aber eine sehr gute Investition, wenn Sie IO-gebunden sind.
quelle