Frage

Ich brauche die richtige Terminologie für eine bestimmte Art von Funktion.

Angenommen, Sie eine Funktion in der SQL-Datenbank schreiben, deren Ein- und Ausgänge im Rahmen einer Datenbanktransaktion enthalten sind.

Das heißt, wenn Sie diese Funktion im Rahmen einer Datenbanktransaktion aufrufen, werden alle von der Funktion verwendet, um Daten innerhalb des gleichen Umfang zur Verfügung. Es kann eine Datenbanktabelle abfragen, aber es kann keine Datei aus dem Dateisystem oder ping eine Website usw. lesen Wenn Sie die Funktion zweimal innerhalb einer einzigen Transaktion mit REPEATABLE READ Isolation nennen, sollten Sie das gleiche Ergebnis erhalten, auch wenn andere Kunden sind die Änderungen in der Datenbank.

Ebenso hat die Funktion keine Nebenwirkungen, außer innerhalb der gleichen Transaktionsbereich. Zustandsänderungen außerhalb des Bereichs der Datenbanktransaktion nicht erlaubt. Die Funktion sollte keine E-Mails senden, noch auf das Dateisystem schreiben, noch speichert Wert in memcached usw. Wenn die Funktionsdaten in der Datenbank ändern, das ist in Ordnung, denn wenn die anrufende Transaktion zurückgesetzt wird, dann ist die Auswirkungen der Funktion sind zu.

Die Argumente der Funktion sind in Ordnung, da sie im Grunde als Konstanten gewohnt sind.

Was wäre die richtige Bezeichnung für eine Funktion dieser Art sein? „Deterministisch“ scheint nicht wirklich spezifisch genug zu sein. Wie würden Sie diese Klasse der Funktion beschreiben?


Vielen Dank für Ihre Antworten, aber keiner von ihnen ist genau das, was ich im Sinn hatte. Idempotent bekommt am nächsten, so dass ich markiert, dass als die akzeptierte Antwort. Aber jeder von euch bekam eine upvote von mir egal.

  • Reine Funktionen keine Nebenwirkungen haben, und ihr Ergebnis basiert ausschließlich auf ihre Argumente. Das Ergebnis der gleichen Argumente gegeben ist immer gleich. Das funktioniert nicht, weil die Datenbank-Funktionen die ich im Sinn haben kann, über den Zustand der Daten basieren, und die Funktion kann auch den Zustand der Daten beeinflussen.

  • Idempotent Funktionen ein Ergebnis basierend auf dem Zustand der Daten zurückgeben kann, und der gleiche Zustand der Daten gegeben, das Ergebnis ist immer gleich. Aber das funktioniert nicht für das, was ich genau im Auge haben; Die Auswirkungen einer Idempotent Funktionen müssen unabhängig davon, in einem unveränderlichen Ergebnis führen, wie oft die Funktion aufgerufen wird. Aber es gibt keinen Unterschied zwischen den Veränderungen innerhalb der Transaktion Isolation und Änderungen außerhalb dieses Bereichs.

War es hilfreich?

Lösung

Sind Sie fragen über Idempotent ?

Andere Tipps

Sie können auch diese reine Funktionen .

Bis zu dem vierten Absatz, dachte ich, es war nur eine reine Funktion mit der Transaktion als implizites Argument. Aber wenn Sie sagen:

  

Die Funktion hat keine Nebenwirkungen, außer innerhalb der gleichen Transaktionsbereich. Zustandsänderungen außerhalb des Bereichs der Datenbanktransaktion nicht erlaubt.

Ich bin mir nicht so sicher. Wollen Sie damit sagen, dass es innerhalb die Transaktion Änderungen machen könnte, aber nicht von ihnen auf einem zukünftigen Aufruf bewusst sein? Wie quadrieren Sie, dass mit:

  

Wenn Sie die Funktion zweimal innerhalb einer einzigen Transaktion mit wiederholbaren READ Isolation anrufen, sollten Sie das gleiche Ergebnis

Mit anderen Worten, begrenzen Sie die in-Transaktion Nebenwirkungen Zuordnungen (wie ein Flag auf true gesetzt), die die gleiche Wirkung haben, wenn sie mehrmals getan?

Es gibt zwei verschiedene Konzepte hier, so dass Sie mehrere Begriffe aus dem gleichen Grunde kombinieren, müssen es niemand Adjektiv „red Kreishaus“ zu beschreiben.

  

> Zustandsänderungen außerhalb des Bereichs der Datenbanktransaktion nicht erlaubt.

     

> Wenn die Funktionsdaten in der Datenbank ändert, das ist in Ordnung, denn wenn die anrufende Transaktion zurückgesetzt wird, dann sind die Auswirkungen der Funktion sind es auch.

Es gibt nur „Datenbankbereich“ und „Sitzungsbereich“. Eine Funktion hat kein Konzept des „Transaktionsbereiches“. Eine Funktion kann innerhalb einer Transaktion verwendet werden oder außerhalb von , die Transaktion, noch aus der Sicht der Funktion gebe es keinen Unterschied.

In den Augen einer Funktion, der „Transaktionsbereich“ ist genau der „Datenbankbereich“. Dinge innerhalb einer nicht ausgeführten Transaktion soll nicht verpflichtet werden, und da dies für alle Geschäfte gilt, gibt es nichts Besonderes an:

  

Wenn Sie die Funktion zweimal innerhalb einer einzigen Transaktion mit wiederholbaren READ Isolation rufen, sollten Sie das gleiche Ergebnis erhalten, auch wenn andere Clients werden die Änderungen in der Datenbank.

, weil das die Transaktion beschreibt, nicht die Funktion. Wir können sicher keine Beschreibung ignorieren, die mit „Transaktionen“ zu tun hat.

  

> Es kann eine Datenbanktabelle abfragen, aber es kann keine Datei aus dem Dateisystem oder ping eine Website, usw. lesen.

     

> Zustandsänderungen außerhalb des Bereichs der Datenbank Transaktion sind nicht erlaubt. Die Funktion sollte keine E-Mails senden, noch auf das Dateisystem schreiben, noch speichert Wert in memcached, etc.

     

> Wenn die Funktionsdaten in der Datenbank ändert, dann ist das in Ordnung denn wenn der anrufende Transaktion zurückgesetzt wird, dann sind die Auswirkungen der Funktion sind zu .

     

> Aber es gibt keinen Unterschied zwischen Änderungen innerhalb Transaktion [Datenbank] Isolierung und Änderungen außerhalb dieses Bereichs.

Der nächste Begriff wäre wahrscheinlich „Datenbank-local“.

  

> Ebenso hat die Funktion keine Nebenwirkungen, außer im selben Transaktion [Datenbank] Umfang.

Was bedeutet es hat Nebenwirkungen.

  

> die Datenbankfunktionen ich im Sinn haben kann, über den Zustand der Daten basieren, und die Funktion kann auch den Zustand der Daten beeinflussen.

Der nächste Begriff "nicht-nullipotent" oder "vielleicht-Stateful" .

So die Schlussfolgerung ist, "A db-lokale Nicht-nullipotent Funktion".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top