4

特定のタイプの機能に適切な用語が必要です。

入力と出力がデータベース トランザクションのスコープ内に含まれる関数を SQL データベースに記述するとします。

つまり、この関数をデータベース トランザクションのスコープ内で呼び出すと、関数によって使用されるすべてのデータが同じスコープ内で使用可能になります。データベース テーブルにクエリを実行できますが、ファイル システムからファイルを読み取ったり、Web サイトに ping を実行したりすることはできません。REPEATABLE READ分離を使用して 1 つのトランザクション内で関数を 2 回呼び出すと、同じ結果が得られるはずです。クライアントはデータベースに変更を加えています。

同様に、同じトランザクション スコープ内を除いて、この関数には副作用がありません。データベース トランザクションの範囲外での状態の変更は許可されていません。関数は、電子メールを送信したり、ファイルシステムに書き込んだり、値を に保存したりすべきではありませんmemcached。関数がデータベース内のデータを変更する場合、それは問題ありません。呼び出し元のトランザクションがロールバックされた場合、関数の効果があまりにも大きくなるためです。 .

関数の引数は、基本的に定数として使用されるため、問題ありません。

このタイプの関数の適切な用語は何ですか? 「決定論的」は実際には十分に具体的ではないようです。このクラスの機能をどのように説明しますか?


ご回答ありがとうございます。冪等性が最も近くなるので、それを受け入れられた回答としてマークしました。しかし、あなたのそれぞれは、関係なく私から賛成票を獲得しました。

  • 純粋な関数には副作用がなく、その結果は引数のみに基づいています。同じ引数が与えられた結果は常に同じです。私が考えているデータベース関数はデータの状態に基づいている可能性があり、関数はデータの状態にも影響を与える可能性があるため、これは機能しません。

  • べき等関数は、データの状態に基づいて結果を返すことができ、データの状態が同じであれば、結果は常に同じになります。しかし、これは私が念頭に置いていることには正確には機能しません。冪等関数の効果は、関数が何回呼び出されても結果が変わらない必要があります。ただし、トランザクションの分離内で行われた変更と、その範囲外で行われた変更の間に区別はありません。

4

4 に答える 4

1

ここには 2 つの異なる概念があるため、「赤い円形の家」を表す形容詞がないのと同じ理由で、複数の用語を組み合わせる必要がある場合があります。

> データベース トランザクションの範囲外での状態の変更は許可されません。

> 関数がデータベース内のデータを変更する場合、それは問題ありません。呼び出し元のトランザクションがロールバックされた場合、関数の影響も同様であるためです。

「データベーススコープ」と「セッションスコープ」しかありません。関数には「トランザクション スコープ」という概念がありません。関数はトランザクション内またはトランザクション外で使用できますが関数の観点からは違いはありません。

関数から見ると、「トランザクション スコープ」はまさに「データベース スコープ」です。コミットされていないトランザクション内のものはコミットされるべきではなく、それはすべてのトランザクションに適用されるため、特別なことは何もありません:

REPEATABLE READ 分離を使用して 1 つのトランザクション内で関数を 2 回呼び出すと、他のクライアントがデータベースに変更を加えている場合でも、同じ結果が得られます。

これは関数ではなくトランザクションを記述しているためです。「トランザクション」に関する説明は無視しても問題ありません。

> データベース テーブルにクエリを実行できますが、ファイル システムからファイルを読み取ったり、Web サイトに ping を実行したりすることはできません。

> データベーストランザクションの範囲外での状態の変更は許可されません。この関数は、電子メールを送信したり、ファイルシステムに書き込んだり、に値を保存したりしてはなりませんmemcached

> 関数がデータベース内のデータを変更する場合、それは問題ありません。呼び出し元のトランザクションがロールバックされた場合、関数の影響も大きくなるためです。

> しかし、トランザクション[データベース] 分離内で行われた変更と、その範囲外で行われた変更の間に区別はありません。

最も近い用語はおそらく「データベースローカル」でしょう。

> 同様に、同じトランザクション[データベース] スコープ内を除いて、この関数には副作用がありません。

つまり、副作用があるということです。

> 私が考えているデータベース関数は、データの状態に基づくことができ、関数はデータの状態に影響を与えることもできます。

最も近い用語は、「非ゼロ可能性」または「おそらくステートフル」です。

したがって、結論は「db-local非nullipent関数」です。

于 2015-03-11T00:52:52.767 に答える