Bagaimana Race Condition Terjadi di Database?

Programmer Zaman Now
7 May 202323:38

Summary

TLDRThe script discusses the importance of handling race conditions in database management, especially in financial applications. It explains race conditions as scenarios where multiple processes update the same data simultaneously, potentially leading to inconsistencies. The presenter illustrates the dangers of unaddressed race conditions using an e-wallet example and outlines methods to manage them, such as using database transactions and locks in SQL databases or conditional updates in NoSQL databases to ensure data consistency and prevent errors in financial transactions.

Takeaways

  • πŸ˜€ The script discusses the importance of handling race conditions, especially in database management, as it is a common topic in interviews and a critical aspect of application development.
  • 🏁 Race conditions occur when multiple processes attempt to update the same data simultaneously, leading to unpredictable outcomes.
  • ⚠️ Poorly managed race conditions can be dangerous, particularly in financial or transactional applications where consistency and accuracy are crucial.
  • πŸ’‘ The script provides a hypothetical scenario where a user named Eko with a balance of 1000 tries to make purchases, illustrating how race conditions can lead to incorrect balance updates.
  • πŸ” To handle race conditions, the script suggests using database transactions and locking mechanisms to ensure that updates are processed sequentially and consistently.
  • πŸ”— The concept of 'locking' is introduced as a way to prevent other processes from accessing the same data until the current process has completed its transaction.
  • πŸ› οΈ The script explains how to implement transactional control and locking in SQL databases, which support these features, to manage race conditions effectively.
  • πŸ“š It is emphasized that understanding how to handle race conditions is essential for developers, especially when working with relational databases that support transactions and locking.
  • πŸ’Ό The script also touches on the challenges of managing race conditions in NoSQL databases that do not support traditional locking mechanisms, suggesting alternative approaches such as conditional updates.
  • πŸ’‘ Finally, the script highlights the importance of this topic in job interviews, indicating that interviewers often ask about race conditions to assess a candidate's understanding of database management and application consistency.

Q & A

  • What is the main topic discussed in the script?

    -The main topic discussed in the script is 'race condition', specifically in the context of database management and its implications in applications, particularly those related to finance or transactions.

  • Why is handling race conditions important in database management?

    -Handling race conditions is crucial in database management because if not properly managed, it can lead to data inconsistencies, especially in financial or transactional applications, which can be dangerous and lead to significant errors or losses.

  • What is an example scenario where a race condition could occur?

    -A race condition could occur when multiple processes try to update the same data simultaneously without proper synchronization, such as multiple transactions attempting to update a user's balance in an e-wallet at the same time.

  • How can race conditions be dangerous in financial applications?

    -Race conditions can be dangerous in financial applications because they might lead to incorrect updates of financial data, such as double withdrawals from an account, incorrect balance calculations, or other inconsistencies that can result in financial loss or fraud.

  • What is the role of database transactions in preventing race conditions?

    -Database transactions play a critical role in preventing race conditions by ensuring that a set of operations are executed in an atomic manner, meaning either all operations succeed or none are applied, thus maintaining data integrity.

  • What is locking in the context of database management, and how does it help with race conditions?

    -Locking in database management is a mechanism to ensure that when a process is reading or writing data, no other process can modify it until the lock is released. This helps prevent race conditions by serializing access to the data.

  • How can you simulate the handling of race conditions with database transactions and locking?

    -You can simulate the handling of race conditions by starting a transaction, performing a select query with a lock (e.g., 'SELECT ... FOR UPDATE'), and then attempting to update the data. If another process tries to access the locked data, it will be forced to wait until the lock is released.

  • What is the alternative approach to handling race conditions in non-relational databases that do not support locking?

    -In non-relational databases that do not support locking, you can handle race conditions by modifying update queries to include conditions that check the last known state of the data before updating, ensuring that only the intended data is updated.

  • How can you ensure that an update query in a non-relational database is only applied to the correct data?

    -You can ensure that an update query is only applied to the correct data by including the expected last known values in the update condition, so the update only proceeds if the current data matches the expected values, preventing unintended updates.

  • Why is understanding race conditions important for developers, especially during interviews?

    -Understanding race conditions is important for developers because it demonstrates knowledge of concurrency issues and data integrity in software development. Interviewers often ask about race conditions to assess a candidate's awareness of these critical concepts and their ability to design robust applications.

Outlines

00:00

🚦 Understanding Race Conditions in Databases

The paragraph introduces the concept of race conditions in the context of database management, particularly during the interview process. It emphasizes the importance of understanding how to handle race conditions, especially in financial or transactional applications. The speaker provides an example of a race condition where multiple processes attempt to update the same data simultaneously, leading to unpredictable outcomes. The paragraph highlights the dangers of not properly managing race conditions, such as in e-wallet applications, and sets the stage for a deeper discussion on how to handle such scenarios.

05:00

πŸ›  Simulating Race Conditions and Their Impact

This section delves into a hypothetical scenario where race conditions occur in an e-wallet application. The speaker simulates a situation where a user named Eko has a balance of 1000 units of currency and attempts to make purchases that could trigger race conditions if not handled correctly. The paragraph explains the process of validating transactions before updating the database to prevent issues. It also discusses the potential for double transactions and how failing to manage race conditions can lead to financial discrepancies and system instability.

10:01

πŸ” Implementing Transactional Control and Locking

The speaker discusses methods to handle race conditions in relational databases using transactions and locking mechanisms. The paragraph explains the importance of using database transactions to ensure that a series of operations either complete successfully together or roll back entirely if one fails. It also covers the use of locks to prevent other processes from accessing the same data simultaneously, thus avoiding race conditions. The speaker suggests using 'SELECT FOR UPDATE' to lock data for an update, ensuring consistency and preventing other transactions from interfering until the first one is completed.

15:03

🚧 Handling Race Conditions Without Lock Support

This paragraph addresses the challenge of managing race conditions in databases that do not support locking, such as many NoSQL databases. The speaker recommends using a relational database for safety but acknowledges scenarios where NoSQL databases might be necessary. The paragraph suggests modifying update queries to include the last known balance as a condition for the update, ensuring that only the intended data is updated. This approach relies on the database's ability to process commands sequentially and check conditions before applying updates.

20:03

πŸ›‘ Ensuring Data Integrity with Conditional Updates

The final paragraph focuses on ensuring data integrity when updating records in databases that do not support transactions or locking. The speaker illustrates how to structure update queries to include conditions that match the last known state of the data. This method helps prevent updates from overwriting changes made by other concurrent transactions. The paragraph explains how to check the 'impacted rows' or the number of rows affected by an update to determine if the update was successful. It also discusses handling scenarios where updates fail due to race conditions and the importance of managing these situations at the application level.

Mindmap

Keywords

πŸ’‘Race Condition

A race condition is a situation in software or a system where the output is dependent on the sequence or timing of other uncontrollable events. It becomes a critical issue in concurrent systems, such as multi-threaded applications or databases, where two or more processes or threads access shared resources and attempt to change them at the same time. In the script, the speaker explains that race conditions can be very dangerous, especially in financial applications, as they can lead to incorrect data handling and potential loss, such as double spending in an e-wallet application.

πŸ’‘Database

A database is an organized collection of data, generally stored and accessed electronically from a computer system. The speaker in the script uses the term to discuss the importance of handling race conditions in database management systems, particularly when multiple processes try to update the same data simultaneously. The correct handling of such situations is crucial to maintain data integrity and prevent issues like double transactions.

πŸ’‘Transaction

In the context of the script, a transaction refers to a series of operations performed as a single unit of work in a database. The script emphasizes the importance of using transactional databases to handle race conditions. Transactions ensure that a series of operations either all occur successfully or are rolled back in case of an error, maintaining the consistency and reliability of the database.

πŸ’‘Locking

Locking in databases is a mechanism used to prevent race conditions by ensuring that when one process is accessing a particular data item, no other process can modify it. The script explains how implementing locks can help manage concurrent access to data, ensuring that updates are made in a controlled and sequential manner, thus preventing data inconsistencies that could arise from simultaneous updates.

πŸ’‘SQL

SQL (Structured Query Language) is a standard language for managing and manipulating relational databases. The script mentions SQL in the context of using transactional control and locking mechanisms to handle race conditions. SQL databases that support transactions and locking are recommended for applications that require high data integrity and concurrency control.

πŸ’‘NoSQL

NoSQL refers to a category of database management systems that do not adhere to the traditional relational database model. The script discusses the challenges of handling race conditions in NoSQL databases, which often do not support the same level of transactional control and locking mechanisms as SQL databases. The speaker suggests that for applications requiring strict concurrency control, it is advisable to use relational databases that support these features.

πŸ’‘Consistency

Consistency in databases refers to the property of a system where all data remains accurate and consistent over time, even in the face of concurrent operations. The script emphasizes the importance of maintaining consistency to prevent errors such as double spending or incorrect data updates, which can occur due to race conditions.

πŸ’‘Rollback

A rollback in database management systems is the process of undoing a series of actions or transactions that were previously executed. The script mentions rollbacks in the context of database transactions, where if one part of a transaction fails, the entire transaction can be rolled back to maintain data integrity and prevent partial updates that could result from race conditions.

πŸ’‘Concurrency

Concurrency in computing refers to the ability of a system to handle multiple processes or tasks simultaneously. The script discusses concurrency in the context of database operations, where multiple users or processes might attempt to access and modify the same data at the same time, potentially leading to race conditions if not properly managed.

πŸ’‘Financial Applications

Financial applications are software systems that deal with monetary transactions and require high levels of data accuracy and security. The script highlights the importance of handling race conditions in financial applications, as failures in these systems can lead to significant financial errors and losses, such as incorrect transactions or double payments.

πŸ’‘E-wallet

An e-wallet, as mentioned in the script, is a digital platform that allows users to store, send, and receive monetary value electronically. The script uses the example of an e-wallet to illustrate the dangers of race conditions, where simultaneous transactions could lead to incorrect balance updates and financial discrepancies if not properly managed.

Highlights

Responsion is a crucial topic that must be understood to handle database transactions properly.

Responsion, or race condition, occurs when multiple processes update the same data simultaneously.

Mishandling race conditions can be dangerous, especially in financial or transactional applications.

An example scenario involves updating a user's balance in a database where multiple transactions occur at once.

The importance of validation before updating the database is emphasized to prevent issues like double spending.

A simulation of a race condition in an e-wallet application is discussed to illustrate the potential dangers.

The concept of handling race conditions in relational databases using transactions and locking is introduced.

Transactions ensure that a series of database operations are treated as a single unit, which helps in maintaining consistency.

Locking mechanisms prevent other processes from accessing the same data simultaneously during an update.

The use of 'SELECT FOR UPDATE' is highlighted as a method to lock data for an update in SQL databases.

A detailed simulation of how locking works in practice to prevent race conditions is provided.

The necessity of understanding race conditions when learning database management is stressed.

The transcript discusses handling race conditions in non-relational databases that do not support locking.

An alternative method for non-relational databases involves updating queries with conditions based on the last known data state.

The concept of checking the impact of an update operation to ensure it affected the correct data row is explained.

The importance of understanding how to handle race conditions during interviews for database-related positions is highlighted.

A summary of best practices for managing race conditions in both SQL and NoSQL databases is provided.

Transcripts

play00:01

condition itu adalah salah satu topik

play00:03

yang banyak sekali ya ditanyakan kalau

play00:06

teman-teman misalnya lagi proses

play00:07

interview misalnya nah tapi bukan

play00:10

berarti ketika banyak orang yang

play00:12

menanyakan tentang responsion bukan

play00:13

berarti itu semacam formalitas aja gitu

play00:16

ya biar orang tahu nggak tapi justru

play00:18

Kenapa banyak ditanyakan karena ini

play00:20

adalah salah satu hal yang wajib Agar

play00:22

kita tahu gimana caranya menangani

play00:24

responsion ya terutama database Kenapa

play00:26

karena kalau misalnya sampai kita tidak

play00:28

bisa menangani hal ini Nah itu bisa

play00:30

berbahaya Nah di sini nanti saya

play00:32

jelaskan contoh ya terjadinya responsion

play00:35

Kenapa sangat berbahaya dan nanti gimana

play00:37

cara penanganannya Yuk kita bahas

play00:41

Oke kita balik ke katanya ya Apa itu Res

play00:44

condition jadi di sini ada katanya Res

play00:46

condition nah udah jelas sebenarnya ya

play00:49

responsion itu berarti kondisi balapan

play00:52

Ya maksudnya apa sih oke maksudnya kayak

play00:55

gini kalau misalnya kasusnya adalah di

play00:57

database condition atau kondisi balapan

play00:59

ini di mana gitu ya ada satu data

play01:02

misalnya atau ada beberapa data misalnya

play01:05

gitu ya mau di-update secara bersamaan

play01:08

oleh lebih dari satu proses Biasanya

play01:10

seperti itu Jadi ini adalah kondisi

play01:11

balapan ya dimana beberapa proses

play01:14

melakukan balapan untuk mengupdate data

play01:16

yang kemungkinan sama ya jadi misalnya

play01:19

kita punya data contoh yang paling

play01:21

simpel centangnya misalnya kita punya

play01:23

data a gitu ya Misalnya ini ada data a

play01:26

gitu ya Nah di sini ada request misalnya

play01:28

request 1 di sini request 2 di sini

play01:32

request 3 di sini request 4 misalnya

play01:34

kita bikin aplikasi entah itu web

play01:36

aplikasi mobile dan lain-lain nah misal

play01:39

44 nya ini mau mengupdate data yang sama

play01:41

jadi ini berbarengan seperti itu

play01:44

updatenya ke yang sama

play01:48

nah ini adalah namanya kondisi race

play01:51

condition ya jadi balapan beberapa

play01:53

proses mengupdate data yang sama Nah

play01:56

kenapa kita perlu bisa menghandle ini

play01:58

karena kalau sampai kita salah menangani

play02:01

hal seperti ini maka akan bisa sangat

play02:04

berbahaya terutama kalau kita bikin

play02:06

aplikasinya yang berhubungan dengan

play02:08

finansial ya atau keuangan itu sangat

play02:10

berbahaya kalau sampai kita tidak bisa

play02:12

menangani responsion Oke nextnya kita

play02:15

coba simulasikan gimana sih Kejadian

play02:17

responsion ini dan kenapa sangat

play02:19

berbahaya ya terutama kalau aplikasi

play02:22

kita berhubungan dengan finansial

play02:25

Oke kita udah tahu ya sekarang itu

play02:27

banyak banget aplikasi World ya

play02:30

contohnya misalnya ada gopay ada dana

play02:33

ada Ovo dan lain-lain

play02:35

nah aplikasi-aplikasi seperti itu pasti

play02:37

sudah menghandle responsion ini dengan

play02:39

baik kenapa Karena kalau sampai tidak

play02:41

maka itu sangat berbahaya Oke kita akan

play02:44

coba simulasikan gimana contoh

play02:46

responsion terjadi Anggap saja kita

play02:47

bikin e-wallet misalnya gitu ya atau

play02:50

e-money tapi kita lupa implementasi

play02:52

responsion oke

play02:54

misal kita punya user misalnya atau

play02:57

misalnya Eko gitu ya Eko saldonya

play03:00

misalnya 1 juta

play03:01

atau ya paling gampang 1000 deh ya nah

play03:05

jadi database kita punya data Eko lalu

play03:08

dia itu

play03:10

saldonya 1000 oke lalu saya ingin

play03:13

membeli barang

play03:14

membeli barang misalnya harganya 500

play03:18

atau 700 deh ya apa yang terjadi ya

play03:21

pastikan kita akan coba ya select dulu

play03:24

ya untuk validasi ya Biasanya kita akan

play03:26

coba validasi dulu jadi tidak langsung

play03:28

tiba-tiba di update database Kenapa

play03:30

karena kita harus validasi dulu misalnya

play03:31

Oh saldo tidak cukup dan lain-lain jadi

play03:33

Biasanya kita akan si like dulu

play03:36

si like ya kita dapat nih oh datanya Eko

play03:40

saldonya ternyata 1000 nah sedangkan

play03:43

kita mau belinya misalnya 700 dari sini

play03:46

kita tahu ya Oke kalau ini masih boleh

play03:48

boleh transaksi ketika transaksi Apa

play03:51

yang dilakukan ya kita biasanya lakukan

play03:52

update

play03:54

update misalnya Eco ya

play03:58

set saldonya itu biasanya 1000 dikurangi

play04:02

700 set 300 seperti ini nah Biasanya

play04:06

kita lakukan seperti ini kalau

play04:08

diperhatikan yang gak ada yang salah

play04:10

dengan ini ya Nah karena memang biasanya

play04:12

kita lakukan itu jadi kita validasi dulu

play04:14

pastikan saldonya cukup Gitu ya kalau

play04:18

udah cukup Oke kita akan langsung hapus

play04:20

bukan hapus Sorry tidak ya atau kurangi

play04:23

saldonya tadinya 1000 kita kurangi 700

play04:26

Jadi 300 dari sini mungkin kita oke

play04:29

nggak ada masalah aplikasi kita sampai

play04:31

tiba-tiba ada kejadian orang yang

play04:33

ngelakuin double purchase

play04:35

dia belanja dua kali tapi di dedaknya

play04:38

satu kali gitu ya Nah kenapa ini

play04:41

kejadian Oke kasusnya adalah berarti

play04:44

aplikasi kita tidak bisa menghandle

play04:46

responsion dengan baik Jadi kalau

play04:49

requestnya cuma satu-satu satu habis itu

play04:51

satu lagi masuk satu lagi musik mungkin

play04:54

itu kita bisa kenal dengan baik nah

play04:56

gimana kalau Ternyata orangnya ngerti

play04:57

gitu ya anggap aja dia pengen tester

play05:00

atau lain-lain lah gitu ya dia Coba bius

play05:03

fitur payment di e-wallet kita jadi dia

play05:06

Coba Siapkan beberapa transaksi

play05:08

contohnya 10 gitu ya lalu tiba-tiba dia

play05:10

submit pada saat yang berbarengan nah

play05:13

hal ini kalau kita proses seperti ini

play05:16

bisa Kejadian karena responsion Oke kita

play05:18

akan coba jadi misalnya dia udah nyiapin

play05:21

anggap aja 3 barang barang yang pertama

play05:23

adalah 800 barang yang kedua adalah 700

play05:27

barang yang ketiga adalah 900 nah Apa

play05:31

yang terjadi ketika dia submit

play05:33

berbarengan query yang pertama kita

play05:35

lakukan adalah query Silet ini ya Silet

play05:38

di mana Eko saldonya berapa nih Nah

play05:41

karena dia berbarengan

play05:43

melakukan requestnya pada saat yang

play05:46

berbarengan gitu ya maka ketika kita

play05:48

melakukan Silet yang tadi semuanya dapat

play05:50

saldonya 1000 ini 1000

play05:54

ini 1000 ini juga 1000 Nah kenapa

play05:57

seperti itu ya karena kan memang kita

play05:59

melakukan Silet dulu untuk validasi ke

play06:01

database gitu ya karena kalau tidak kita

play06:03

validasi ke database ya bingung ya

play06:05

masalah langsung di submit aja gitu ya

play06:06

Nah kita pasti validasi dulu kita

play06:09

ketika Si lag tiga-tiganya dapat 1000

play06:12

Kenapa karena barang-barang semuanya

play06:14

masuk Nah ketika dapat 1000 apa yang

play06:16

terjadi berarti ini dianggap Oke valid

play06:20

ya

play06:21

karena masih di

play06:24

atas

play06:26

ini masih oke masuk ini juga sama masih

play06:29

oke Dan ini juga sama masih oke nah

play06:32

lihat kan dari sini kita udah kebayang

play06:34

problemnya Apa akhirnya pada saat yang

play06:37

bersamaan juga proses ini mengupdate

play06:40

saldo jadi 200 gitu ya ini menjadi 300

play06:44

ini menjadi 100 nah soal ini mana yang

play06:47

menang ya nggak tahu ya nanti ya

play06:50

untung-untungan aja yang menangnya

play06:52

misalnya yang 300 gitu berarti yang 300

play06:55

berarti di database kita yang ke record

play06:58

itu mungkin cuma transaksi ini

play07:01

dua transaksi ini tidak terikat Kenapa

play07:03

karena

play07:05

kejadiannya balapan dan ini yang menang

play07:07

tapi dua ini juga tetap selesai

play07:10

transaksinya ya dianggap sukses dianggap

play07:13

sukses dianggap sukses nah ini sangat

play07:15

berbahaya makanya kalau misalnya kita

play07:18

bikin aplikasi yang berhubungan dengan

play07:19

finansial ya atau transaksi lah

play07:21

istilahnya kayak mungkin toko online

play07:23

gitu ya maka ini perlu benar-benar

play07:25

ditangani ya Untuk masalah responsion

play07:28

ini contohnya sederhana kayak gini kalau

play07:30

misalnya tiba-tiba bareng masuk

play07:32

requestnya ketika kita validasi Oh

play07:34

ternyata Saldonya masih cukup nih 1000

play07:36

semua gitu ya jadi 33 requestnya masih

play07:38

cukup akhirnya 33 itu dianggap sukses

play07:40

Nah itu sangat berbahaya jadi ini

play07:43

kejadian rest condition maka dari itu

play07:46

tiap orang gitu ya ketika belajar

play07:49

database harusnya benar-benar ngerti

play07:51

gimana caranya menangani responden

play07:56

Oke kita tahu ya di database itu ada dua

play07:59

jenis saat ini kebanyakan ada yang

play08:01

berbasis SQL atau relasional Anda juga

play08:04

yang no sequel ya Nah kita bahas dulu

play08:06

tentang cara menangani responsion di

play08:08

yang database relasional ya atau

play08:10

menggunakan SQL nah sebenarnya cara

play08:13

kalau misalnya kita menangani responsion

play08:15

di database relasional itu lumayan mudah

play08:18

ya nah salah satunya yang paling penting

play08:21

kita bisa proses semuanya harus

play08:23

menggunakan database transaksional

play08:26

namanya dan yang kedua adalah

play08:27

menggunakan locking jadi ini harus

play08:29

digabung ya jadi harus menggunakan BB

play08:33

transaction dan harus menggunakan lock

play08:37

seperti ini Jadi ini dua hal yang bisa

play08:39

kita lakukan Oke kita akan coba

play08:42

simulasikan yang tadi lagi gitu ya tapi

play08:44

kita akan Coba lakukan debit

play08:46

transaksional dan juga lock ya Oke jadi

play08:50

yang pertama tadi kan ada dua jenis

play08:52

query ya Yang pertama adalah silex untuk

play08:55

dapetin saldonya saat ini berapa yang

play08:57

kedua itu adalah updatenya Nah

play08:58

dua-duanya kita harus rape menggunakan

play09:00

database transaksional Nah teman-teman

play09:02

kalau tidak tahu silahkan Googling ya

play09:04

harusnya sih kita beneran harus tahu ya

play09:06

tentang database transaksional

play09:07

sederhananya adalah

play09:09

kalau misalnya kita melakukan beberapa

play09:12

instruksi query misalnya maka akan

play09:15

dianggap sukses kalau semuanya sukses

play09:16

dan akan dianggap gagal kalau salah

play09:19

satunya gagal jadi kalau salah satunya

play09:21

gagal maka semuanya akan di rollback

play09:23

istilahnya atau digagalkan Nah kita

play09:25

pengen hal itu terjadi jadi kita akan

play09:27

jalan misalnya

play09:30

Bigen transaction gitu Ya

play09:32

bikin transaction misalnya dan terakhir

play09:36

misalnya commit

play09:38

transaction oke

play09:41

Nah di sini yang pertama kan tadi ya

play09:43

select dulu dan yang kedua itu adalah

play09:45

update nah ketika melakukan select Nah

play09:48

di sini kita harus implementasi yang

play09:49

namanya locking locking itu menjaga agar

play09:53

nanti ketika ada orang yang melakukan

play09:55

silex lagi ke data yang sama maka dia

play09:58

diminta untuk berhenti jadi menunggu

play10:00

istilahnya tuh nunggu dulu sampai orang

play10:03

yang pertama kali atau proses yang

play10:04

pertama kali sukses ya melakukan lock

play10:07

itu selesai melakukan komit transaksi

play10:10

Jadi kalau belum selesai melakukan

play10:13

komentar saksi maka yang lain tidak

play10:14

boleh mendapatkan datanya dari sini kita

play10:17

bisa memastikan bahwa datanya akan

play10:19

konsisten ya Jadi kalau misalnya

play10:21

tiba-tiba ada tadi ada 3 request bareng

play10:24

masuk maka salah satunya yang akan

play10:26

diperbolehkan mendapatkan lock-nya

play10:28

mendapatkan kuncinya nah artinya dua

play10:31

yang tadi akan menunggu sampai yang

play10:34

pertama sukses atau selesai komen nah

play10:37

ketika misalnya selesai komit nah dia

play10:39

akan diberikan kunci selanjutnya ke

play10:41

proses yang selanjutnya Nah setelah

play10:44

selesai baru yang ke-3 yang terakhir

play10:46

dengan seperti ini dengan kita

play10:49

implementasi lock akan memaksa prosesnya

play10:52

yang tadinya bareng masuk gitu ya maka

play10:54

akan dipaksa menjadi sekuensial satu

play10:57

persatu jadi ngantri istilahnya

play11:00

Jadi yang pertama kita select

play11:03

kalau misalnya di beberapa database

play11:06

biasanya untuk locking di belakangnya

play11:07

kalau misalnya select yang tadi ya data

play11:09

Eko nanti di belakangnya di kita kasih

play11:11

perintah lock Biasanya sih beberapa

play11:14

database pakainya for misalnya update

play11:17

jadi ini di lock kita udah tahu kalau

play11:20

data ini akan di lock data Eco ini dan

play11:22

di locknya itu untuk di-update kalau

play11:25

datanya di lock for update artinya

play11:28

Ketika nanti ada orang lain yang

play11:29

melakukan si lag lagi ke data Eko maka

play11:32

dia akan diminta menunggu Kenapa karena

play11:35

yang ini itu akan melakukan update ada

play11:38

juga si likenya for share ya kalau for

play11:41

share itu cuma untuk di select aja nggak

play11:44

akan di update seperti itu Nah setelah

play11:46

itu setelah kita Silet ini ya sama di

play11:49

sini tinggal update

play11:51

update yang econya yang set saldonya

play11:54

berapa gitu ya yang baru Nah dengan kita

play11:57

menggunakan database Excel ini Oke

play11:59

sekarang kita simulasikan lagi

play12:01

simulasikan ada 3 request ya tadi

play12:04

request yang pertama itu 800 produknya

play12:07

habis itu yang 700 habis itu yang 900 ya

play12:12

Oke ketika tiga-tiganya masuk lalu

play12:15

tiga-tiganya akan start transaction ya

play12:18

Nah Star transactionnya bareng start

play12:20

trx Misalnya ini semuanya barang ya

play12:24

tiga-tiganya Oke tapi perintah

play12:27

selanjutnya itu adalah Silet ke database

play12:30

gitu ya tapi menggunakan lock jadi

play12:34

select Eco misalnya datanya yang for

play12:37

update ya artinya Apa artinya kalau 33

play12:40

ini melakukan hal yang sama maka si

play12:43

database hanya akan memilih satu saja

play12:45

yang diperbolehkan Nah siapa yang

play12:47

diperbolehkannya kita nggak tahu ya

play12:49

Tergantung ya kalau beneran milih

play12:51

second-nya sama banget gitu ya ya paling

play12:53

mungkin databasenya pilih salah satu

play12:54

tapi kalau beda dikit ya paling ya yang

play12:57

paling pertama aja yang duluan gitu ya

play12:58

anggap aja misalnya yang pertama adalah

play13:00

yang 900 itu jadi ini yang dapat 1000

play13:04

ini apa ya Ini nunggu White

play13:07

ini juga White

play13:09

jadi nunggu dia nggak dapet saldo 1000

play13:12

nya Nah setelah itu kan ini update ya

play13:14

Nah ketika update jadi saldonya berapa

play13:17

sekarang 100 setelah 100 ini komit ini

play13:21

sorry tadinya saldonya 1000 berubah jadi

play13:23

100 ini

play13:26

setelah komet selesai Berarti kan

play13:28

saldonya 100 Nah akhirnya locknya sudah

play13:31

dilepas jadi di sini locknya dilepas

play13:33

gitu ya selesai Nah selanjutnya adalah

play13:37

akan diberikan locknya ke 2 Proses ini

play13:40

nah tapi karena databasenya sudah jadi

play13:42

100 ketika contohnya lock-nya sekarang

play13:44

dikasihkan ke proses yang kedua ini di

play13:47

sini dapatnya 100 saldonya sudah tidak

play13:50

lagi 1000 karena di sini sudah di lock

play13:52

dan di sini suruh nunggu Nah karena

play13:54

saldonya 1000 maka ini otomatis di

play13:57

batalin ya transaksinya

play14:03

karena tidak lgble ya karena beli

play14:06

barangnya 700 lalu akinya locknya

play14:08

dilepas lagi akinya dikasih ke sini

play14:11

dikasih ke sini saldonya tetap 100

play14:14

select pertama jadi di sini kita udah

play14:16

tahu kalau ini udah nggak lgble lagi nah

play14:19

jadi dengan seperti ini kita bisa

play14:21

menangani Rose condition dengan baik

play14:24

Jadi kalau ada tiga Proses yang masuk Ya

play14:27

udah yang pertama dulu gitu ya kalau

play14:28

misalnya Saldonya masih oke ya baru

play14:31

nanti dia di sukses yang kedua Tapi

play14:33

kalau dari yang kedua udah tidak Oke ya

play14:35

udah gagal ketika tidak Oke ya udah

play14:37

gagal seperti itu Nah jadi ini

play14:39

penanganan responsion kalau teman-teman

play14:42

menggunakan database relasional ya yang

play14:44

mendukung transaksional dan juga locking

play14:47

Jadi kalau databasenya mungkin pakai

play14:50

tetap pakai SQL misalnya tapi tidak

play14:52

mendukung ini ya nggak bisa contohnya

play14:53

mungkin Cassandra Cassandra kan pakai

play14:55

hampir mirip kayak SQL juga tapi dia

play14:58

nggak ada database transional sama

play14:59

lockingnya seperti itu Nah jadi seperti

play15:02

ini yang handle untuk yang relasional ya

play15:05

yang support transaction dan locking nah

play15:07

pertanyaannya Gimana kalau database yang

play15:09

kita gunakan tidak mendukung locking nah

play15:12

gimana caranya Yuk kita bahas

play15:15

oke yang terakhir kita bahas cara

play15:17

menangani responsion di my SQL ya atau

play15:22

sebenarnya kan prosesnya kan sama kayak

play15:24

tadi ya yang pertama kita select dulu

play15:26

yang kedua adalah update cuma

play15:28

pertanyaannya sekarang ketika ngelakuin

play15:29

silek kita nggak bisa looking karena

play15:31

beberapa ya hampir Kebanyakan sih ya

play15:33

hampir kebanyakan nosikuel itu tidak

play15:36

support working gitu ya termasuk juga

play15:37

database transaksional nah pertanyaannya

play15:40

gimana nih kalau databasenya seperti ini

play15:42

nah jujur sih sebenarnya saya kalau

play15:45

misalnya ada kasus teman-teman yang

play15:46

berhubungan dengan

play15:47

proses-proses kayak kejadian seperti ini

play15:50

itu memang rekomendasinya adalah

play15:52

menggunakan database yang relasional Ya

play15:54

karena memang lebih aman nah tapi kalau

play15:56

misalnya memang ada kasus kita udah

play15:59

terlanjur menggunakan database yang no

play16:01

sequel kalau pindahnya itu ke

play16:03

database-nya itu lumayan Limbad Gimana

play16:05

caranya nih untuk menangani ini Oke

play16:07

caranya sebenarnya kita bisa ubah query

play16:10

update-nya Jadi yang pertama kita masih

play16:13

tetap siletnya yang sama gitu ya mungkin

play16:15

teman-teman kalau pakai database seperti

play16:16

mongo dan lain-lain ya find ke

play16:18

databasenya masih tetap sama gitu ya

play16:19

Jadi yang pertama prosesnya masih tetap

play16:22

sama jadi contohnya

play16:25

Eko misalnya ya Nah di sini kan otomatis

play16:28

dapat 1000 ya Misalnya yang tadi

play16:31

saldonya misalnya nah yang kedua ketika

play16:34

proses update

play16:37

itu kan biasanya kita update misalnya

play16:39

gitu ya

play16:40

pakainya set gitu ya Misalnya saldonya

play16:43

sama dengan saldo terakhirnya misalnya

play16:46

300 gitu ya Nah biasanya kan ditambah

play16:49

wear

play16:51

misalnya user sama dengan Eco seperti

play16:55

ini

play16:56

Nah sekarang teman-teman tambahkan

play16:59

kondisi updatenya Jangan cuma where user

play17:02

sama dengan Eko tapi apa teman-teman

play17:05

juga harus Sebutkan saldo terakhirnya

play17:08

jadi saldo terakhirnya contohnya di sini

play17:10

saldo sama dengan 1000

play17:15

seperti ini

play17:16

Nah dengan kita menyebutkan saldo

play17:19

terakhirnya 1000 Maka kalau misalnya ada

play17:22

yang mengupdate berbarengan walaupun

play17:24

update itu berbarengan biasanya database

play17:26

ya Secara low level dia akan eksekusinya

play17:28

satu persatu gitu ya artinya Apa artinya

play17:30

kalaupun di aplikasi kita tidak bisa

play17:33

handle Res condition gitu ya karena

play17:34

tidak bisa melakukan locking tapi

play17:36

Minimal kita percayakan proses ininya

play17:39

respondennya di level database jadi kita

play17:42

kirim query tapi kita tambahkan harus

play17:45

saldo terakhirnya berapa

play17:47

nah kasusnya jadinya gimana oke jadinya

play17:49

seperti ini kalau kita lakukan seperti

play17:51

ini gitu ya querynya seperti ini Anggap

play17:54

saja kita nggak bisa locking Oke kita

play17:56

akan simulasikan yang tadi lagi

play17:58

jadi

play18:00

tadi ini kayaknya kebesaran kita pakai

play18:02

yang ini

play18:04

Oke jadi misalnya tadi yang pertama itu

play18:07

800 ya

play18:09

terus 700 terus 900 Oke select yang

play18:16

pertama udah pasti nih kita nggak bisa

play18:18

locking jadi semuanya pasti dapat 1000

play18:20

jadi ini dapat 1000

play18:22

ini juga dapat 1000 ini juga dapat 1000

play18:27

tapi kita bisa jaga di proses update-nya

play18:30

nah ketika melakukan update

play18:33

Kita kan nggak tahu ya Siapa yang duluan

play18:35

dieksekusi oleh databasenya gitu ya tapi

play18:37

yang penting ketika kita melakukan

play18:39

update kita lakukan update seperti ini

play18:40

jadi di sini proses updatenya itu kita

play18:44

update Kalau yang ini ya kita kan 800

play18:48

Sorry 1000 dikurangi 800 berarti 200 ya

play18:51

jadi di sini set 200 saldonya

play18:55

di mana usernya Eko

play19:00

dan juga saldonya 1000

play19:04

ini juga sama

play19:06

set 3

play19:09

00 usernya Eco saldonya 1000 ini juga

play19:13

sama set 100 dimana usernya Eko saldonya

play19:18

adalah 1000 nah ketika kita kirim

play19:21

perintah ini 3 tidak tampil sebenarnya

play19:24

karena dia mengupdate record yang sama

play19:26

dia akan di handle satu persatu

play19:28

sebenarnya nah pertanyaannya siapa yang

play19:31

duluan ya kita nggak tahu ya Tergantung

play19:32

databasenya suka-suka database mau

play19:34

update yang mana Oke kita ya pura-pura

play19:37

aja misalnya yang duluan itu yang ini

play19:38

misalnya

play19:39

ketika ini dilakukan perintahnya

play19:43

kondisinya berarti saldonya berubah ya

play19:46

Jadi 300 nah

play19:48

jadi di sini saldo database sekarang 300

play19:52

karena ini yang duluan

play19:55

dan kondisinya pun sudah benar ya

play19:57

usernya Eko dan ininya 100 ya

play20:02

kita contreng dulu di sini nah jadi

play20:05

kondisi ekornya benar dan ini kondisi

play20:07

ininya benar Oke Berarti sekarang saldo

play20:11

di database adalah 300 Oke ketika

play20:13

misalnya sekarang yang kedua yang

play20:15

dieksekusi ini gitu ya

play20:17

set 200 ini otomatis tidak jadi query

play20:22

update-nya itu diterima oleh database

play20:25

tapi nanti Biasanya kita akan bisa dapat

play20:27

impacted row impact with adalah berapa

play20:31

banyak row yang ke-update dari proses

play20:33

perintah update ini kalau di sini itu

play20:36

kita biasanya dapat satu ya jadi di sini

play20:38

dapat satu

play20:40

karena memang iya match ke satu data

play20:42

yaitu yang usernya Eko dan saldonya 1000

play20:45

nah tapi yang query ini ini mungkin

play20:48

ketika diupdate sukses jadi tidak ada

play20:50

error ya kalau di yang sebelumnya kan

play20:52

bisa error ya atau di rollback

play20:54

transaksinya Tapi kalau ini tidak error

play20:56

tetap diterima jadi mirip kayak

play20:59

teman-teman dilihat data ke database

play21:00

tapi datanya salah gitu ya tetep

play21:03

diterima querynya tapi nanti impacted

play21:05

rownya ada berapa gitu ya contohnya 0

play21:07

nah ini

play21:09

ketika dia set 200 usernya Eko udah

play21:12

pasti ada user Eko tapi karena dia kirim

play21:15

parameter juga dimana saldonya harus

play21:17

1000 nah ini tidak dapat tidak database

play21:19

karena saldo databasenya adalah 300 jadi

play21:22

yang ini ketika dieksekusi maka impact

play21:25

tutorialnya adalah kosong

play21:27

Nah dari sini kita tahu kalau kosong dia

play21:30

gagal jadi nanti kita handle di aplikasi

play21:32

kita Oke ketika kita update ternyata

play21:34

yang impact totronnya itu kosong itu

play21:36

berarti gagal jadi kita bilang ke

play21:39

usernya kalau transaksi anda gagal

play21:41

seperti itu Nah selanjutnya kan

play21:44

dipindahkan ke sini misalnya nah ketika

play21:47

di sini juga sama gitu ya usernya Eko

play21:49

dapat Tapi saldonya 1000 nggak dapat

play21:51

karena saldo terakhir sekarang 300 jadi

play21:53

ini impact to draw-nya akan nol juga nah

play21:57

seperti ini dengan begitu otomatis ini

play21:59

akan digagalkan jadi teman-teman bisa

play22:01

gagalkan di level aplikasi ini

play22:03

digagalkan ini juga digagalkan jadi yang

play22:06

sukses itu cuma yang ini aja gitu ya

play22:10

nah seperti ini Jadi ini kalau

play22:12

teman-teman mau nangani responsionnya

play22:15

yang di level yang bukan no SQL ya seri

play22:18

yang bukan relasional database jadi di

play22:20

database yang no sequel jadi bisa

play22:22

teman-teman ubah si querynya jadi

play22:25

querynya itu ditambahkan statement

play22:28

terakhir istilahnya Jadi kalau saldo ya

play22:30

saldo terakhir kalau misalnya misalnya

play22:32

kalau Oh ada loyalty Point ya loyal

play22:35

typoin terakhir sebelum di-update dan

play22:36

lain-lain dengan ini bisa memastikan

play22:39

bahwa ketika kita update itu benar-benar

play22:41

mengupdate data yang kita mau dan kalau

play22:44

impact rownya seperti ini contohnya Ini

play22:46

kosong ini kosong berarti kita tahu

play22:48

kalau dia mengupdate data yang

play22:50

sebelumnya sudah berubah dengan begitu

play22:53

ya Otomatis kita bisa gagal kan atau

play22:56

batalkan sih prosesnya Nah jadi seperti

play22:59

ini beberapa cara untuk menangani Res

play23:01

condition ya Nah ini teman-teman perlu

play23:03

pahami dengan baik Kenapa karena sering

play23:06

banget kalau diproses interview itu

play23:07

ditanyain soal responsion kenapa Ya

play23:10

karena memang ini sangat berbahaya kalau

play23:13

kita tidak bisa menangani responsion

play23:15

dengan baik

Rate This
β˜…
β˜…
β˜…
β˜…
β˜…

5.0 / 5 (0 votes)

Related Tags
Database ManagementRace ConditionsFinancial SecurityTransaction HandlingSQL TransactionsLocking MechanismsNoSQL DatabasesConsistencyWeb ApplicationError Handling