こんにちは。トランザクションの意味とプログラムの関数の意味の違いが分からないので質問しました。検索してみると、「複数の処理をひとつにまとめたもの」と紹介している記事があり、関数と何が違うのかが分かりません。
そこで、私はトランザクションという大きな集合があり、その要素として関数があると認識しているのですが、この認識は誤っていますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
コンピューターシステム界隈では、トランザクションと言うとデータの更新が必ず含まれますが、プログラム関数はデータの更新が含まれるとは限りません。
そもそも対比するものではなく、「トランザクション処理を行う関数」や「関数内のトランザクション処理部分」のように、包含する関係にあると思います。
投稿2021/11/06 13:06
編集2021/11/09 09:29総合スコア25327
0
トランザクションの意味とプログラムの関数の意味の違い
トランザクションは業務的な処理の単位のことですね。
データベースの命令を例にすると BEGIN TRANSACTION
から COMMIT TRANSACTION
までが1つのトランザクションになります。(トランザクションの命令は DB や API の種類により異なります。例は SQL Server の命令になります。)
COMMIT
すると処理が確定し、ROLLBACK
すると処理が無かったことになります。
また、トランザクションはデータベースに限った話ではありません。ファイルシステムの読み書きやメール送受信などもトランザクションとして扱うこともあります。
説明については、こちらの説明が分かりやすいかもしれません。
■ 「トランザクション」とは何か?を超わかりやすく語ってみた!
https://qiita.com/zd6ir7/items/6568b6c3efc5d6a13865
実際のプログラミングの例としては、下記を参照下さい。(少し情報が古いですが、トランザクションの概念としては今もそれほど変わってはいないかと思います。)
■ 接続型データアクセスと短時間トランザクション
https://atmarkit.itmedia.co.jp/fdotnet/entwebapp/entwebapp10/entwebapp10_01.html
私はトランザクションという大きな集合があり、その要素として関数があると認識しているのですが、この認識は誤っていますか?
考えとしてはあながち間違いではないと思います。関数を処理の単位ととらえれば、トランザクションは関数の集合と呼べなくもないと思います。
有識者の方からは突っ込みが入りそうですが、イメージとしては、
・トランザクション … 業務的な処理単位(論理的な処理の単位。成功/失敗=COMMIT/ROLLBACKがある)
・プログラムの関数 … コンピュータが理解できる処理単位
という感じでしょうか・・
投稿2021/11/06 10:36
総合スコア4648
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私はトランザクションという大きな集合があり、その要素として関数があると認識しているのですが、この認識は誤っていますか?
はい。間違っています。
例えば、「内閣総理大臣」と「学級委員」をどちらも「何人かの人間の代表者」という概念でひとくくりにしようとしているようなもので、それぞれの意味の理解のためにはほとんど無意味です。
関数は、プログラミング言語での複数の文をひとつのかたまりにしたものです(言語により用語は違う)。
トランザクションは、主としてデータベースの複数の更新アクセスを不可分(すべての更新を有効にするか、すべて無効にするかの二択)としたものです。
それぞれ、別々に学習されるのがよいと思います。
投稿2021/11/07 04:26
総合スコア85901
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
えーと……分からなくなってきた。
関数にデータ編集権を丸投げする場合、全ての呼び出し元がだれがいついつまでどこまで独占しているか把握してないと駄目なんですかね?
(ひとつの帳簿に何人も同時に書き込みしようとしているイメージ)
→
「常に固定の一人の責任者」に依頼するしかなさそう?
ひとつの依頼でトラブル起こしたら他の全ての担当業務も止まりますかね?
……
現在の業務に関連する一部の帳簿だけを貸し出したら確実に返して貰えるかな?
そうすれば貸し出し業務だけになって、何でも自前でやらなくて済むんだけど。
余計な内容まで知らなくて済……
(秘密はクリティカルなリスク)。
投稿2021/11/09 08:33
総合スコア18
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
トランザクションにはいろいろな意味があります。
不可分(atomic)な処理を表す場合がありますし、HTTPプロトコルの要求と応答の対を表す場合もあります。また、暗号通貨では、取引の記録を意味します。
プログラムの関数にもいろいろな意味があります。
C言語の関数とFORTRANの関数は意味が違いますし、そのどちらも関数型プログラミングの関数ではありません。
こういう質問をする前に、いろろなトランザクションの違い、プログラムの関数の意味の違いについて勉強することをお勧めします。
投稿2021/11/07 14:06
総合スコア24670
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
別物だと思います。
私自身はその手の教育(大学は違う学科)を受けていないため、詳しくはわかりませんが、ざっくりと調べたところまったく別物だと思っています。
MySQLを例にとると、ここに提示されているような関数はあくまで、処理をするためだけのものです。(そしてその結果が欲しいと)
でもトランザクションは、基本情報技術者試験に出る内容から考えると、『整合性を取るため』に行われる処理です。データベース特有(?)のものです
(ご指摘にあるように、別の分野とかでも使われるので修正)
ここにあるように、『データの編集が完了してから』すべてのデータが更新されます。
たとえば MySQLで データAを編集 -> データBを編集 -> データCを編集 とした場合、普通にやると、もし『データBで失敗』したらどうなるでしょうか。別のところでもいいですが。
そうなると、他のA,Cとかのようなところと矛盾が生じてしまいます。
そこで、A,B,Cすべて完了してから不具合がなければ完了とする。的な整合性を取ろうとすればどうでしょうか。そう、矛盾が生じませんね。(まあ、その処理自体に矛盾がある場合も無くはないがそれを言うときりがないため無視)
その整合性を取るために、処理A,B,Cをまとめるのがトランザクションっぽいです。
MySQLとかで提供されているMINUTE関数だのは、処理をするためです。
書き方とかはDBソフト? (MySQLとか)によって違うとは思いますが、発想はこれです。
なので別物ですね。
投稿2021/11/06 08:50
編集2021/11/06 13:27総合スコア4962
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/06 13:26
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。