---
date: '2024-12-11'
description: and concurrency control.
id: Transaction
modified: 2026-06-05 15:08:42 GMT-04:00
tags:
  - sfwr3db3
title: Transaction
created: '2024-12-11'
published: '2024-12-11'
pageLayout: default
slug: thoughts/university/twenty-four-twenty-five/sfwr-3db3/Transaction
permalink: https://aarnphm.xyz/thoughts/university/twenty-four-twenty-five/sfwr-3db3/Transaction.md
generator:
  quartz: v4.6.0
  hostedProvider: Cloudflare
  baseUrl: aarnphm.xyz
full: https://aarnphm.xyz/llms-full.txt
---
see also [[thoughts/university/twenty-three-twenty-four/sfwr-3bb4/index|concurrency]]

> A sequence of read/write

## concurrency

inter-leaved processing: concurrent exec is _interleaved_ within a single CPU.

parallel processing: process are concurrently executed on _multiple_ CPUs.

<figure class="tikz" data-remark-tikz style="padding-top: 3rem;gap: 5rem;"><span class="tikz-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><annotation encoding="application/x-tex">"\\usepackage{tikz}\n\\usetikzlibrary{arrows.meta, positioning}\n\n\\begin{document}\n\\begin{tikzpicture}[font=\\small, node distance=1.5cm, >=latex]\n\n%------------------------------\n% Interleaved Processing\n%------------------------------\n\n% Place the title higher up\n\\node[font=\\bfseries, align=center] (interleavedTitle) at (5, 1) {Interleaved (Time-Sliced) Processing};\n\n% Draw the timeline axis lower down\n\\draw[->] (-0.5,2) -- (10,2) node[below]{Time};\n\n% Processes above the time line\n% P1 intervals\n\\draw[fill=blue!30] (0,2.4) rectangle (2,3) node[midway]{P1};\n\\draw[fill=blue!30] (4,2.4) rectangle (6,3) node[midway]{P1};\n\\draw[fill=blue!30] (8,2.4) rectangle (9.5,3) node[midway]{P1};\n\n% P2 intervals\n\\draw[fill=red!30] (2,2.4) rectangle (4,3) node[midway]{P2};\n\\draw[fill=red!30] (6,2.4) rectangle (8,3) node[midway]{P2};\n\n%------------------------------\n% Parallel Processing\n%------------------------------\n\\begin{scope}[yshift=-1cm]\n\n% Title for parallel processing\n\\node[font=\\bfseries, align=center] (parallelTitle) at (5,-3.2) {Parallel (Concurrent) Processing};\n\n% Timelines for parallel processing\n\\draw[->] (-0.5,-1) -- (10,-1) node[below]{Time};\n\\draw[->] (-0.5,-2.5) -- (10,-2.5) node[below]{Time};\n\n% Process 1 on core 1 (above the -1 line)\n\\draw[fill=blue!30] (0,-0.6) rectangle (9.5,-0.0) node[midway]{P1 running on Core 1};\n\n% Process 2 on core 2 (above the -2.5 line)\n\\draw[fill=red!30] (0,-2.1) rectangle (9.5,-1.5) node[midway]{P2 running on Core 2};\n\\end{scope}\n\n\\end{tikzpicture}\n\\end{document}"</annotation></semantics></math></span><img src="data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzMTIuODIzMTVwdCIgaGVpZ2h0PSIyMTMuMzkyNjRwdCIgdmlld0JveD0iLTcyIC03MiAzMTIuODIzMTUgMjEzLjM5MjY0Ij48ZyBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01Ny44NDM2NDMxODg0NzY1NSwxMy4yODgyMjMyNjY2MDE1NTkpIHNjYWxlKDEsLTEpIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2Utd2lkdGg9IjAuNCI+IDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ5LjQ4ODUxLDI1Ljk1Mjc0KSI+IDxnIHN0cm9rZT0iIzAwMCIgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSB0cmFuc2xhdGUoLTU3Ljg0MzY0MzE4ODQ3NjU1LDEzLjI4ODIyMzI2NjYwMTU1OSkgc2NhbGUoLTEsLTEpIj48ZyBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIj4gPHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSItNTcuODQzNjQzMTg4NDc2NTUiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iYmxhY2siPkluPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iLTQ3LjQxMzEzNTUyODU2NDQ0NiIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayI+dGVybGVhPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iLTE5LjE5Nzk4NDY5NTQzNDU2NyIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayI+djwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9Ii0xMy40NDgwMTUyMTMwMTI2OTIiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iYmxhY2siPmVkPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iMi4wNDQ5Njc2NTEzNjcxODciIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iYmxhY2siPihUaW1lLVNsaWNlZCk8L3RleHQ+PHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSI3NC4yNTI5MzM1MDIxOTcyNSIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayI+UHJvPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iOTIuOTE5NTE1NjA5NzQxMiIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayI+Y2Vzc2luZzwvdGV4dD48L2c+IDwvZz4gPC9nPjwvZz4gPC9nPiA8cGF0aCBkPSIgTSAtMTQuMjI2MzYgNTYuOTA1NDkgTCAyODAuOTI3NDkgNTYuOTA1NDkgICIgZmlsbD0ibm9uZSI+PC9wYXRoPiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAuOTI3NDksNTYuOTA1NDkpIj4gPHBhdGggZD0iIE0gMy41OTk5NSAwLjAgQyAyLjUzMzI4IDAuMiAwLjc5OTk5IDAuNzk5OTkgLTAuNCAxLjQ5OTk3IEwgLTAuNCAtMS40OTk5NyBDIDAuNzk5OTkgLTAuNzk5OTkgMi41MzMyOCAtMC4yIDMuNTk5OTUgMC4wICAiIHN0cm9rZT0ibm9uZSI+PC9wYXRoPiAgPC9nPiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzMuOTkxMDYsNDcuMjIyNTUpIj4gPGcgc3Ryb2tlPSIjMDAwIiBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIiB0cmFuc2Zvcm09InNjYWxlKC0xLDEpIHRyYW5zbGF0ZSgtNTcuODQzNjQzMTg4NDc2NTUsMTMuMjg4MjIzMjY2NjAxNTU5KSBzY2FsZSgtMSwtMSkiPjxnIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiPiA8dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9Ii01Ny44NDM2NDMxODg0NzY1NSIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjkiIGZpbGw9ImJsYWNrIj5UaW1lPC90ZXh0PjwvZz4gPC9nPiA8L2c+PC9nPiA8L2c+IDxnIGZpbGw9IiNiM2IzZmYiPiA8cGF0aCBkPSIgTSAwLjAgNjguMjg2NCBNIDAuMCA2OC4yODY0IEwgMC4wIDg1LjM1ODIzIEwgNTYuOTA1NDkgODUuMzU4MjMgTCA1Ni45MDU0OSA2OC4yODY0IFogTSA1Ni45MDU0OSA4NS4zNTgyMyAgIj48L3BhdGg+IDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyLjk5MzA3LDczLjc0NzMzKSI+IDxnIHN0cm9rZT0iIzAwMCIgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSB0cmFuc2xhdGUoLTU3Ljg0MzY0MzE4ODQ3NjU1LDEzLjI4ODIyMzI2NjYwMTU1OSkgc2NhbGUoLTEsLTEpIj48ZyBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIj4gPHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSItNTcuODQzNjQzMTg4NDc2NTUiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI5IiBmaWxsPSJibGFjayI+UDE8L3RleHQ+PC9nPiA8L2c+IDwvZz48L2c+IDwvZz4gPC9nPiA8ZyBmaWxsPSIjYjNiM2ZmIj4gPHBhdGggZD0iIE0gMTEzLjgxMDk3IDY4LjI4NjQgTSAxMTMuODEwOTcgNjguMjg2NCBMIDExMy44MTA5NyA4NS4zNTgyMyBMIDE3MC43MTY0NiA4NS4zNTgyMyBMIDE3MC43MTY0NiA2OC4yODY0IFogTSAxNzAuNzE2NDYgODUuMzU4MjMgICI+PC9wYXRoPiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzYuODA0MDUsNzMuNzQ3MzMpIj4gPGcgc3Ryb2tlPSIjMDAwIiBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIiB0cmFuc2Zvcm09InNjYWxlKC0xLDEpIHRyYW5zbGF0ZSgtNTcuODQzNjQzMTg4NDc2NTUsMTMuMjg4MjIzMjY2NjAxNTU5KSBzY2FsZSgtMSwtMSkiPjxnIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiPiA8dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9Ii01Ny44NDM2NDMxODg0NzY1NSIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjkiIGZpbGw9ImJsYWNrIj5QMTwvdGV4dD48L2c+IDwvZz4gPC9nPjwvZz4gPC9nPiA8L2c+IDxnIGZpbGw9IiNiM2IzZmYiPiA8cGF0aCBkPSIgTSAyMjcuNjIxOTUgNjguMjg2NCBNIDIyNy42MjE5NSA2OC4yODY0IEwgMjI3LjYyMTk1IDg1LjM1ODIzIEwgMjcwLjMwMTA2IDg1LjM1ODIzIEwgMjcwLjMwMTA2IDY4LjI4NjQgWiBNIDI3MC4zMDEwNiA4NS4zNTgyMyAgIj48L3BhdGg+IDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0My41MDE4Myw3My43NDczMykiPiA8ZyBzdHJva2U9IiMwMDAiIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkgdHJhbnNsYXRlKC01Ny44NDM2NDMxODg0NzY1NSwxMy4yODgyMjMyNjY2MDE1NTkpIHNjYWxlKC0xLC0xKSI+PGcgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSI+IDx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iLTU3Ljg0MzY0MzE4ODQ3NjU1IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iYmxhY2siPlAxPC90ZXh0PjwvZz4gPC9nPiA8L2c+PC9nPiA8L2c+IDwvZz4gPGcgZmlsbD0iI2ZmYjNiMyI+IDxwYXRoIGQ9IiBNIDU2LjkwNTQ5IDY4LjI4NjQgTSA1Ni45MDU0OSA2OC4yODY0IEwgNTYuOTA1NDkgODUuMzU4MjMgTCAxMTMuODEwOTcgODUuMzU4MjMgTCAxMTMuODEwOTcgNjguMjg2NCBaIE0gMTEzLjgxMDk3IDg1LjM1ODIzICAiPjwvcGF0aD4gPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzkuODk4NTYsNzMuNzQ3MzMpIj4gPGcgc3Ryb2tlPSIjMDAwIiBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIiB0cmFuc2Zvcm09InNjYWxlKC0xLDEpIHRyYW5zbGF0ZSgtNTcuODQzNjQzMTg4NDc2NTUsMTMuMjg4MjIzMjY2NjAxNTU5KSBzY2FsZSgtMSwtMSkiPjxnIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiPiA8dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9Ii01Ny44NDM2NDMxODg0NzY1NSIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjkiIGZpbGw9ImJsYWNrIj5QMjwvdGV4dD48L2c+IDwvZz4gPC9nPjwvZz4gPC9nPiA8L2c+IDxnIGZpbGw9IiNmZmIzYjMiPiA8cGF0aCBkPSIgTSAxNzAuNzE2NDYgNjguMjg2NCBNIDE3MC43MTY0NiA2OC4yODY0IEwgMTcwLjcxNjQ2IDg1LjM1ODIzIEwgMjI3LjYyMTk1IDg1LjM1ODIzIEwgMjI3LjYyMTk1IDY4LjI4NjQgWiBNIDIyNy42MjE5NSA4NS4zNTgyMyAgIj48L3BhdGg+IDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE5My43MDk1Myw3My43NDczMykiPiA8ZyBzdHJva2U9IiMwMDAiIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkgdHJhbnNsYXRlKC01Ny44NDM2NDMxODg0NzY1NSwxMy4yODgyMjMyNjY2MDE1NTkpIHNjYWxlKC0xLC0xKSI+PGcgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSI+IDx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iLTU3Ljg0MzY0MzE4ODQ3NjU1IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iYmxhY2siPlAyPC90ZXh0PjwvZz4gPC9nPiA8L2c+PC9nPiA8L2c+IDwvZz4gPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTkuNDYwNywtMTIyLjAwMTQzKSI+IDxnIHN0cm9rZT0iIzAwMCIgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSB0cmFuc2xhdGUoLTU3Ljg0MzY0MzE4ODQ3NjU1LDEzLjI4ODIyMzI2NjYwMTU1OSkgc2NhbGUoLTEsLTEpIj48ZyBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIj4gPHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSItNTcuODQzNjQzMTg4NDc2NTUiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iYmxhY2siPlA8L3RleHQ+PHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSItNTAuMzAyMDE1MzA0NTY1NDE1IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9ImJsYWNrIj5hcmFsbGVsPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iLTE1LjY5ODAyODU2NDQ1MzEyMSIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayI+KENvbmN1cnJlbjwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9IjQxLjUzMDg3MDQzNzYyMjA2IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9ImJsYWNrIj50KTwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9IjU0LjMwODU4MDM5ODU1OTU1NiIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayI+UHJvPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iNzIuOTc1MTYyNTA2MTAzNSIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayI+Y2Vzc2luZzwvdGV4dD48L2c+IDwvZz4gPC9nPjwvZz4gPC9nPiA8cGF0aCBkPSIgTSAtMTQuMjI2MzYgLTU2LjkwNTQ5IEwgMjgwLjkyNzQ5IC01Ni45MDU0OSAgIiBmaWxsPSJub25lIj48L3BhdGg+IDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI4MC45Mjc0OSwtNTYuOTA1NDkpIj4gPHBhdGggZD0iIE0gMy41OTk5NSAwLjAgQyAyLjUzMzI4IDAuMiAwLjc5OTk5IDAuNzk5OTkgLTAuNCAxLjQ5OTk3IEwgLTAuNCAtMS40OTk5NyBDIDAuNzk5OTkgLTAuNzk5OTkgMi41MzMyOCAtMC4yIDMuNTk5OTUgMC4wICAiIHN0cm9rZT0ibm9uZSI+PC9wYXRoPiAgPC9nPiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzMuOTkxMDYsLTY2LjU4ODQyKSI+IDxnIHN0cm9rZT0iIzAwMCIgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSB0cmFuc2xhdGUoLTU3Ljg0MzY0MzE4ODQ3NjU1LDEzLjI4ODIyMzI2NjYwMTU1OSkgc2NhbGUoLTEsLTEpIj48ZyBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIj4gPHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSItNTcuODQzNjQzMTg4NDc2NTUiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI5IiBmaWxsPSJibGFjayI+VGltZTwvdGV4dD48L2c+IDwvZz4gPC9nPjwvZz4gPC9nPiA8cGF0aCBkPSIgTSAtMTQuMjI2MzYgLTk5LjU4NDYgTCAyODAuOTI3NDkgLTk5LjU4NDYgICIgZmlsbD0ibm9uZSI+PC9wYXRoPiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAuOTI3NDksLTk5LjU4NDYpIj4gPHBhdGggZD0iIE0gMy41OTk5NSAwLjAgQyAyLjUzMzI4IDAuMiAwLjc5OTk5IDAuNzk5OTkgLTAuNCAxLjQ5OTk3IEwgLTAuNCAtMS40OTk5NyBDIDAuNzk5OTkgLTAuNzk5OTkgMi41MzMyOCAtMC4yIDMuNTk5OTUgMC4wICAiIHN0cm9rZT0ibm9uZSI+PC9wYXRoPiAgPC9nPiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzMuOTkxMDYsLTEwOS4yNjc1MykiPiA8ZyBzdHJva2U9IiMwMDAiIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkgdHJhbnNsYXRlKC01Ny44NDM2NDMxODg0NzY1NSwxMy4yODgyMjMyNjY2MDE1NTkpIHNjYWxlKC0xLC0xKSI+PGcgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSI+IDx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iLTU3Ljg0MzY0MzE4ODQ3NjU1IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iYmxhY2siPlRpbWU8L3RleHQ+PC9nPiA8L2c+IDwvZz48L2c+IDwvZz4gPGcgZmlsbD0iI2IzYjNmZiI+IDxwYXRoIGQ9IiBNIDAuMCAtNDUuNTI0NTUgTSAwLjAgLTQ1LjUyNDU1IEwgMC4wIC0yOC40NTI3NCBMIDI3MC4zMDEwNiAtMjguNDUyNzQgTCAyNzAuMzAxMDYgLTQ1LjUyNDU1IFogTSAyNzAuMzAxMDYgLTI4LjQ1Mjc0ICAiPjwvcGF0aD4gPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTEuMTI2ODgsLTM5LjE4ODYzKSI+IDxnIHN0cm9rZT0iIzAwMCIgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSB0cmFuc2xhdGUoLTU3Ljg0MzY0MzE4ODQ3NjU1LDEzLjI4ODIyMzI2NjYwMTU1OSkgc2NhbGUoLTEsLTEpIj48ZyBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIj4gPHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSItNTcuODQzNjQzMTg4NDc2NTUiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI5IiBmaWxsPSJibGFjayI+UDE8L3RleHQ+PHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSItNDMuODQwOTU4NTk1Mjc1ODciIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI5IiBmaWxsPSJibGFjayI+cnVubmluZzwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9Ii05LjM4OTc5MDUzNDk3MzE0MyIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjkiIGZpbGw9ImJsYWNrIj5vbjwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9IjMuNDU3MzQ2OTE2MTk4NzI5NiIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjkiIGZpbGw9ImJsYWNrIj5Db3JlPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iMjUuNTc4NzM5MTY2MjU5NzYiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI5IiBmaWxsPSJibGFjayI+MTwvdGV4dD48L2c+IDwvZz4gPC9nPjwvZz4gPC9nPiA8L2c+IDxnIGZpbGw9IiNmZmIzYjMiPiA8cGF0aCBkPSIgTSAwLjAgLTg4LjIwMzY3IE0gMC4wIC04OC4yMDM2NyBMIDAuMCAtNzEuMTMxODUgTCAyNzAuMzAxMDYgLTcxLjEzMTg1IEwgMjcwLjMwMTA2IC04OC4yMDM2NyBaIE0gMjcwLjMwMTA2IC03MS4xMzE4NSAgIj48L3BhdGg+IDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkxLjEyNjg4LC04MS44Njc3NSkiPiA8ZyBzdHJva2U9IiMwMDAiIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkgdHJhbnNsYXRlKC01Ny44NDM2NDMxODg0NzY1NSwxMy4yODgyMjMyNjY2MDE1NTkpIHNjYWxlKC0xLC0xKSI+PGcgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSI+IDx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iLTU3Ljg0MzY0MzE4ODQ3NjU1IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iYmxhY2siPlAyPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9IjEzLjI4ODIyMzI2NjYwMTU1OSIgeD0iLTQzLjg0MDk1ODU5NTI3NTg3IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iYmxhY2siPnJ1bm5pbmc8L3RleHQ+PHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSItOS4zODk3OTA1MzQ5NzMxNDMiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI5IiBmaWxsPSJibGFjayI+b248L3RleHQ+PHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iMTMuMjg4MjIzMjY2NjAxNTU5IiB4PSIzLjQ1NzM0NjkxNjE5ODcyOTYiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI5IiBmaWxsPSJibGFjayI+Q29yZTwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSIxMy4yODgyMjMyNjY2MDE1NTkiIHg9IjI1LjU3ODczOTE2NjI1OTc2IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iYmxhY2siPjI8L3RleHQ+PC9nPiA8L2c+IDwvZz48L2c+IDwvZz4gPC9nPiA8L2c+IDwvZz4gPC9nPjwvc3ZnPg==" alt="tikz diagram" loading="lazy" decoding="async"><figcaption><em>source code</em><button class="source-code-button" aria-label="copy source code for this tikz graph" title="copy source code for this tikz graph"><svg class="source-icon" xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 -4 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><use href="#code-icon"></use></svg><svg class="check-icon" xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 -4 16 16" fill="currentColor" stroke="none" stroke-width="0" stroke-linecap="round" stroke-linejoin="round"><use href="#github-check"></use></svg></button></figcaption></figure>

## ACID

- atomic: either performed in its entirety (DBMS’s responsibility)
- consistency: must take database from consistent state $X$ to $Y$
- isolation: appear as if they are being executed in <mark>isolation</mark>
- durability: changes applied must persist, even in the events of failure

## Schedule

![[thoughts/university/twenty-four-twenty-five/sfwr-3db3/venn-schedule.webp|Venn diagram for schedule]]

> \[!abstract\] definition
>
> a schedule $S$ of $n$ transaction $T_{1}, T_{2}, \ldots, T_{n}$ is an _ordering_ of operations of the transactions subject to the constrain that
>
> For all transaction $T_i$ that participates in $S$, the operations of $T_i$ in $S$ **must appear in the same order** in which they occur in $T_i$

For example:

$$
S_a: R_{1}(A),R_{2}(A),W_{1}(A),W_{2}(A),\text{Abort1},\text{Commit2};
$$

- serial schedule: _does not interleave the actions of different transactions_
- equivalent schedule: effect of executing any schedule are the same

> \[!quote\] serialisable schedule
>
> a schedule that is equvalent to some _serial execution_ of the set of _committed_ transactions

### serial

![[thoughts/university/twenty-four-twenty-five/sfwr-3db3/serial-transaction.webp]]

> \[!note\] serialisable schedule
>
> ![[thoughts/university/twenty-four-twenty-five/sfwr-3db3/serialisable-transaction.webp|Note that this is not a serial schedule, given there are interleaved operations.]]
>
> $S:R_1(A),W_1(A), R_2(A), W_2(A), R_1(B), W_1(B), R_2(B), W_2(B)$

### conflict

> \[!tip\] operations in schedule
>
> said to be in _conflict_ if they satisfy all of the following:
>
> 1. belong to <mark>different</mark> operations
> 2. access the same item $A$
> 3. at least one of the operations is a `write(A)`

| Concurrency Issue | Description                                                                           | Annotation |
| ----------------- | ------------------------------------------------------------------------------------- | ---------- |
| Dirty Read        | Reading uncommitted data                                                              | WR         |
| Unrepeatable Read | T2 changes item $A$ that was previously read by T1, while T1 is still in progress     | RW         |
| Lost Update       | T2 overwrites item $A$ while T1 is still in progress, causing T1’s changes to be lost | WW         |

#### conflict serialisable schedules

Two schedules are conflict equivalent if:

- involves the same actions of the same transaction
- every pair of conflicting actions is ordered the same way

> Schedule $S$ is _conflict serialisable_ if $S$ is conflict equivalent to some serial schedule

If two schedule $S_{1}$ and $S_{2}$ are conflict equivalent then they have the same effect $S_{1} \leftrightarrow S_{2}$ by _swapping non-conflicting ops_

Every conflict serialisable schedule is serialisable

> \[!note\] on conflict serialisable
>
> only consider **committed** transaction

### schedule with abort

![[thoughts/university/twenty-four-twenty-five/sfwr-3db3/unrecoverable-transaction.webp|Note that this schedule is unrecoverable if T2 committed]]

_However, if T2 did not commit, we abort T1 and cascade to T2_

need to avoid _cascading abort_

- if $T_i$ writes an object, then $T_j$ can read this _only after_ $T_i$ commits

### recoverable and avoid cascading aborts

**Recoverable**: a $X_\text{act}$ commits _only after_ all $X_\text{act}$ it depends on commits.

**ACA**: idea of aborting a $X_\text{act}$ can be done without cascading the abort to other $X\text{act}$

> ACA implies recoverable, <mark>not vice versa</mark>

### precedent graph test

_is a schedule conflict-serialisable?_

- build a graph of all transactions $T_i$
- Edge from $T_i$ to $T_j$ if $T_i$ comes first, and makes an action that conflicts with one of $T_j$

> if graphs has no cycle then it is **conflict-serialisable**

### strict

> if a value written by $T_i$ is not read or overwritten by another $T_j$ until $T_i$ abort/commit

Are recoverable and ACA

## Lock-based concurrency control

think of mutex or a lock mechanism to control access to a data object

> transaction _must_ release the lock

> \[!math\] 1. notation
>
> `Li(A)` means $T_i$ acquires lock for A, where as `Ui(A)` releases lock for A

| Lock Type | None | S        | X        |
| --------- | ---- | -------- | -------- |
| None      | OK   | OK       | OK       |
| S         | OK   | OK       | Conflict |
| X         | OK   | Conflict | Conflict |

_lock compatibility matrix_

overhead due to delays from blocking; minimize throughput

- use smallest sized object
- reduce time hold locks
- reduce hotspot

### shared locks

$S_T(A)$ for reading

### exclusive lock

$X_T(A)$ for write/read

### strict two phase locking (Strict 2PL)

- Each $X_\text{act}$ must obtain a <mark>S lock</mark> on object before reading, and an <mark>X lock</mark> on object before writing
- All lock held by transaction will be released when transaction is completed

> only schedule those precedence graph is acyclic

> recoverable and ACA

Example:

| T1                      | T2                           |
| ----------------------- | ---------------------------- |
| <mark>L(A);</mark>      |                              |
| R(A), W(A)              |                              |
|                         | <mark>L(A); DENIED...</mark> |
| <mark>L(B);</mark>      |                              |
| R(B), W(B)              |                              |
| <mark>U(A), U(B)</mark> |                              |
| Commit;                 |                              |
|                         | <mark>...GRANTED</mark>      |
|                         | R(A), W(A)                   |
|                         | <mark>L(B);</mark>           |
|                         | R(B), W(B)                   |
|                         | <mark>U(A), U(B)</mark>      |
|                         | Commit;                      |

> \[!note\] implication
>
> - only allow safe interleavings of transactions
> - $T_{1}$ and $T_{2}$ access different objects, then no conflict and each may proceed
> - serial action

### two phase locking (2PL)

lax version of strict 2PL, where it allow $X_\text{act}$ to release locks before the end

- <mark>a transaction cannot request additional lock once it releases any lock</mark>

> \[!note\] implication
>
> - all lock requests _must_ precede all unlock request
> - ensure _conflict serialisability_
> - two phase transaction growing phase, (or obtains lock) and shrinking phase (or release locks)

### isolation

| Isolation Level    | Description                                 |
| ------------------ | ------------------------------------------- |
| `READ UNCOMMITTED` | No read-lock                                |
| `READ COMMITTED`   | Short duration read locks                   |
| `REPEATABLE READ`  | Long duration read/lock on individual items |
| `SERIALIZABLE`     | All locks long durations                    |

### Deadlock

cycle of transactions waiting for locks to be released by each other

usually create a wait-for graph to detect cyclic actions

- wait-die: lower transactions never wait for higher priority transactions

- wound-wait: $T_i$ is higher priority than $T_j$ then $T_j$ is aborted and restarts later with same timestamp, otherwise $T_i$ waits

