Це відео не доступне.
Перепрошуємо.

Bagaimana Race Condition Terjadi di Database?

Поділитися
Вставка
  • Опубліковано 19 сер 2024
  • Bagaimana Race Condition Terjadi di Database?
    #programmerzamannow #database #racecondition
    JOIN PREMIUM : www.youtube.co...
    DISCORD PREMIUM : • Post
    Donasi :
    Saweria : saweria.co/Pro...
    Social Media :
    Instagram : / programmerzamannow
    Facebook : / programmerzamannow
    Telegram : t.me/Programme...
    UA-cam : / programmerzamannow

КОМЕНТАРІ • 117

  • @BudyKIr
    @BudyKIr 7 місяців тому +3

    Cara kedua di NoSQL itu basically adalah Optimistic Locking biasa jg di terapkan di SQL dan di bnyak cases lebih cocok jg terapin Optimistic Lock,,,biasanya pakai cara additional condition atau row versionning

  • @hafidhpradipta8446
    @hafidhpradipta8446 Рік тому +22

    Sebenernya ada cara lain untuk handling race condition (secara lebih universal) yang berkaitan dengan update database, yaitu pake schema versioning. Cara ini harus nambahin column version (default nya 1). Nah nanti pas waktu melakukan update misal ada 2 request yang masuk bersamaan dan mengacu pada kolom-kolom yang sama kita lakukan query kurang lebih gini
    UPDATE table SET column=value, version=version + 1 WHERE user=eko AND version=oldversion;
    kita mengupdate column yang ingin diubah dan increment version nya dengan 1 tetapi kondisi version nya yang lama. Sehingga jika request pertama yang dipilih oleh DB maka request kedua akan failed karena version sudah berubah. #JustSharing.

    • @ProgrammerZamanNow
      @ProgrammerZamanNow  Рік тому +14

      Strategi itu namanya optimistic locking, mirip seperti solusi kedua yg saya bahas

    • @hafidhpradipta8446
      @hafidhpradipta8446 Рік тому

      ​@@ProgrammerZamanNow iya bener kang, optimistic locking update.

    • @muhammadsalbiyath4212
      @muhammadsalbiyath4212 Рік тому

      Tapi kang, kalo request itu berbarengan kan nanti mereka versionya pasti sama posisinya. Saya pernah coba ini dan pas ditest 2 request itu punya value version yg sama. Nah itu gmana ya?

    • @hafidhpradipta8446
      @hafidhpradipta8446 Рік тому +2

      @@muhammadsalbiyath4212 iya emg gitu cara kerjanya, ada dua versi sama yg masuk. yang pertama duluan ke update (success), yang kedua akan fail karena version udah ga sama lagi (udah di increment dari percobaan yang pertama)

    • @Blazeplay20
      @Blazeplay20 Рік тому

      solusi yang bagus bngt nih

  • @margonogono6973
    @margonogono6973 Рік тому +4

    Terima kasih.

  • @AsepRojali
    @AsepRojali Рік тому +4

    Seru nih race condition, Dlu sya coba terapin optimistic locking dan untuk dapat test case nya pake jmeter concurrent request

  • @kuntetdilaga5031
    @kuntetdilaga5031 Рік тому +1

    Mantap, lagi kena masalah ini, eh muncul videonya, makasih banyak kang 🙏

  • @aliif
    @aliif Рік тому +1

    thx pak, pemahaman baru bagi saya untuk versi nosql nya

  • @nurcahyaari
    @nurcahyaari Рік тому +2

    Biasanya saya kalo handle race condition pake distributed lock di level service layernya. cuman case race condition ini masih jadi hal yang menurut saya agak susah, terutama di level performance. karena race condition ini harus dihandle dengan cara ngebikin kondisi itu enggak async, tapi sync. karena sync impact nya ke performance. semisal 1 request makan 100ms, timeout 60s. ada concurrent processes sebanyak 601, otomatis data yang ke 601 pasti kena timeout. udah gitu masing masing proses mulai ke 50 keatas udah pasti akan terasa lama, karena prosesnya masih nyangkut nunggu unlocked

    • @ProgrammerZamanNow
      @ProgrammerZamanNow  Рік тому +5

      Betul, tujuan lock biar data aman, jadi performance dikorbankan

  • @muhammadyusufmalik9248
    @muhammadyusufmalik9248 Рік тому

    Gabut gabisa tidur malah nonton konten yg isinya daging. Makasih mas eko 😁

  • @farisdewantoro5069
    @farisdewantoro5069 Рік тому +1

    Cara lain bisa jg pakai redis-lock, jadi ketika ada user yang ingin melakukan transaction kita cek dulu user-id tersebut sedang di proses atau tidak, kalo key nya exist artinya sedang di proses kalo tidak lock key nya

  • @permanadiningrat
    @permanadiningrat Рік тому

    saya biasanya untuk penanganan awal handling by redis, bikin util manggil setNX, 2 request secara bersamaan sebelum masuk database sudah dilarang , hanya 1 yang akan berhasil

  • @indoprintingdevops3312
    @indoprintingdevops3312 Рік тому +4

    Secara global untuk meng-handle Race Condition adalah menggunakan teknik Mutual Exclusion, di mana jika terjadi request secara simultan, hanya ada satu request yang dapat diproses dan request lainnya harus menunggu sampai request pertama tadi selesai. Teknik ini tidak bergantung pada bahasa pemrograman tertentu. Tapi bisa diimplementasikan hampir disemua bahasa pemrograman.

    • @egipebriyawan1455
      @egipebriyawan1455 5 місяців тому

      cara melakukan req simultan nya ituo gimana ya ms ? apa kalau dicontoh ini pakai apps dan web secara bersamaan pakai 1 akun ?

    • @tyohary2284
      @tyohary2284 14 днів тому

      Klo preventif nya di level app nya susah bang, misal app nya running on multiple container, beda container beda mutex

  • @LatenightDev
    @LatenightDev Місяць тому

    Terimakasih bang untuk penjelasannya.

  • @MulkanSyarifSTP
    @MulkanSyarifSTP Рік тому

    Waah penjelasan yg clear sekali

  • @Ketzunouka
    @Ketzunouka Рік тому +5

    pak eko bahas pooling utk spring boot yg best practice dong, kadang ada app yg querynya blm optimal, atau kadang bikin nyangkut di pool dll. Paling sering nemu issue HikariPoll - Connection is not available 😅

  • @ShortTani
    @ShortTani Рік тому

    Semua database punya fungsi untuk menangani race condition, biasanya lock/start/begin -commit-rollback. Tinggal bagaimana kita memanfaatkannya secara benar.
    Beberapa saya temui, mereka kesulitan menggunakan "start-commit/rollback" jika melibatkan banyak table.

    • @user-es5bp3bw5z
      @user-es5bp3bw5z 3 місяці тому

      Bener pada kesulitan make fitur mysql start trnsaction

  • @darl_04
    @darl_04 Рік тому

    Mantap pak eko bermanfaat banget ilmunya, baru tahu bisa gitu ternyata

  • @dev9033
    @dev9033 Рік тому

    kalau ditempat saya menggunakan skema balance locked dan balance available, dimana ketika proses transaksi akan dilakukan pemindahan balance dari avaibale ke locked

  • @nightking896
    @nightking896 Місяць тому

    terima kasih pak eko

  • @jayjolupoi88891
    @jayjolupoi88891 Рік тому

    Mantap Mas, terima kasih wejangannya

  • @rahmatamrif775
    @rahmatamrif775 9 місяців тому

    Terima kasih ilmunya pak 🙏🙏

  • @abzalomkyeuwkyeuw
    @abzalomkyeuwkyeuw Рік тому +1

    Kalo di laravel mudah di tangani dengan Cache Lock

  • @projo27
    @projo27 Рік тому +1

    Makasih bang

  • @akhmadnurmuhammad7148
    @akhmadnurmuhammad7148 3 місяці тому +1

    pak, kalo kita begin with isolation level serialize query selectnya perlu for update juga ga ya?
    thanks for answer

  • @Rhidayah
    @Rhidayah Рік тому +3

    Oh jd ini yg namany race condition,, wkwk dulu nge abuse nickname facebook. Jd teknikny sprti itu di tabrakin 2 input. Tujuan abuse nickname. Buat bkin akun hantu. Jdi stiap orng yg mengunjungi akun kita, bkl 404 not found wkwk

  • @didi_abdillah
    @didi_abdillah Рік тому

    nah ini yang yang saya suka overthinking jika web saya banyak sudah usernya.

  • @Rifal15
    @Rifal15 Рік тому +2

    jika menggunakan trigger apa masih bisa kena masalah race condition ?

  • @alfuady
    @alfuady Рік тому

    wah mantap sekali ini pak eko, saya sempat cari2 juga bahasan seperti ini sebelum2 nya untuk problem di sistem yang saya bikin, tp saya masih bingung sampai saat ini masih sering terjadi miss data tersebut walaupun sudah menggunakan DBTrx , yaa meskipun lebih jarang dari yang sebelum2 nya, permasalah awal saya karena memang bugs di coding nya karena ada proses integrasi ke 3rd party, dan akhirnya benar2 saya pisahkan proses nya, namun entah kenapa masih aja suka terjadi 2-3 kali, apakah ada yang mengalami hal yang sama jg?

  • @umardev500
    @umardev500 5 місяців тому

    RC di golang tinggal pasangin mutex

  • @nat_peterson47
    @nat_peterson47 Рік тому +1

    Bang, gimana cara handle transactional request.. untuk microservice. Best practice mekanisme untuk nge rollback ke setiap service

  • @vanetti8771
    @vanetti8771 Рік тому

    Bagus

  • @user-zr3zx2ob4n
    @user-zr3zx2ob4n 10 місяців тому

    Barusan aplikasi gue kena kondisi seperti ini, akhirnya saldo jebol, untung masih bisa terdeteksi

  • @Giburozu
    @Giburozu 5 місяців тому +1

    Permisi pak mau tanya. Apakah fitur like seperti instagram juga termasuk race condition? Terimakasih semoga dijawab

  • @Masheru14
    @Masheru14 Рік тому

    Nice

  • @lionelnahormoata4020
    @lionelnahormoata4020 Рік тому +2

    Kasusnya kaya saya persis ini waktu pake salah 1 e-wallet pesen double order food tapi saldo masih blm kepotong persis bgt kaya race condition, tapi kayanya skrg udah diupdate sama developnya, jadi begitu mau double order, yang 1 langsung ke update(saldo langsung terpotong).

    • @ProgrammerZamanNow
      @ProgrammerZamanNow  Рік тому +1

      anda kurang beruntung

    • @Ferifroyo
      @Ferifroyo Рік тому

      ​@@ProgrammerZamanNow adalagi gak Pak Echo cara lainnya biar bisa dapat gratisan cuma2 😊😅

    • @egipebriyawan1455
      @egipebriyawan1455 5 місяців тому

      definisinya double order tuh gimana ya Mas ? masih pemula maaf.

  • @herlianzhang6125
    @herlianzhang6125 Рік тому +2

    apakah kita perlu Handling Race Condition di semua data atau hanya untuk yang critical saja (seperti saldo, point, dll)?

    • @ProgrammerZamanNow
      @ProgrammerZamanNow  Рік тому +1

      bagusnya di semua hal, tapi kalo sulit, di hal-hal yang sangat penting

  • @user-ji6sb1bt9r
    @user-ji6sb1bt9r Рік тому +2

    Untuk kasus NoSQL, misal kasus begini:
    Eko saldo 1000
    transaksi:
    A -> 700
    B -> 100
    C -> 800
    Kalau dengan WHERE saldo 1000 nanti transaksi B fail kan ya, yang seharusnya sukses karena saldo masih sisa.
    kira-kira gmn ya?
    Thanks

    • @TriAriSetiawan
      @TriAriSetiawan Рік тому

      mungkin where jika saldo > nilai_transaksi

    • @ProgrammerZamanNow
      @ProgrammerZamanNow  Рік тому +1

      anggap urutannya A, B, dan C, otomatis B dan C fail, karena saldo udah tidak 1000 lagi

    • @user-ji6sb1bt9r
      @user-ji6sb1bt9r Рік тому

      ​@@ProgrammerZamanNow Tapi transaksi B secara nominal harusnya success kan ya mas, karena nilai transaksinya masih dibawah saldo.

    • @the-antroy
      @the-antroy Рік тому

      betul, karena B < saldo = 300

    • @JemikaNegara
      @JemikaNegara Рік тому

      ​@@user-ji6sb1bt9r mungkin bisa retry cek saldo lagi mas, kalau saldo masih bisa dideduct coba set ulang, kalau saldo tidak mencukupi baru kirim error ke user

  • @ryaniseverywhere
    @ryaniseverywhere Рік тому

    ACID principles

  • @farrel6788
    @farrel6788 Рік тому +3

    Kurang paham yang dateng 3 request berbarengan, emang web server bakal ngehandle 3 request itu bareng2 bukan selesain satu2?

    • @didi_abdillah
      @didi_abdillah Рік тому +3

      kalau dari Compiler Bahasa Pemrograman umumnya single thread, tapi karena Web Server lah yang ngejalanin dengan multi thread sampai batas kemampuan baik hardware atau software tersebut, dan itu masuk akal apalagi untuk server dengan user yang ribuan hingga jutaan, kalau di set pakai single thread doang jadinya nanti delay antrian.

    • @egipebriyawan1455
      @egipebriyawan1455 5 місяців тому

      gini mungkin mas maksdnya, dateng 3 request trx . nah request itu ada 3 tahap
      1. cek harga
      2. validasi saldo apakah cukup atau tidak.
      3. update saldo.
      nah kecolongannya adalah ketika proses update saldo belum selesai . request lain udah masuk di validasi, yang mana saldo belum selesai diupdate . jadi bisa kecolongn. yang saya bingung justru gimana caranya melakukan 3 request secara bersamaan . haha .. kalau salah maaf ya ..

  • @ibnufachrizal
    @ibnufachrizal Рік тому

    aku pernah pentest di ewallet beli gpc 1jt cuma bayar 20k pake metode race condition di burp turbo intruder

  • @davidimannuel6639
    @davidimannuel6639 Рік тому +2

    untuk penangan locking buat no SQL setahu saya itu namanya optimistic locking,saya mau bertanya apakah boleh juga pak menerapkan optimistic locking pada relational database, dan apakah secara performa sama saja dengan menggunakan row level locking (select for update)+ db trx ?

    • @ProgrammerZamanNow
      @ProgrammerZamanNow  Рік тому

      boleh banget, bisa optimistic locking bisa dimana aja

    • @davidimannuel6639
      @davidimannuel6639 Рік тому

      @@ProgrammerZamanNow thx info pak 🙏

    • @rezavanessa4284
      @rezavanessa4284 Рік тому

      @@ProgrammerZamanNow kalo pake optimistic locking bisa kena deadlock ga pak?

  • @harisoche
    @harisoche Рік тому +1

    mau tanya mas klw misalkan pake relational terus pke transactional dan di lock, apakah ketika ada proses lain yg select ke table yg sama dia jadi ikut nunggu juga? klw misalkan iya nnti proses yg lain jadi ikut antri dan bisa nyebabin aplikasi jdi lebih lambat response-nya. Bener gtu ga ?

  • @exelfer081
    @exelfer081 Рік тому

    Entahlah, klo di nosql kita bisa get saldo terakhir baru validasi, dan di update...

  • @GalihAlHakim-pq6el
    @GalihAlHakim-pq6el 3 місяці тому

    bang tanya nih, kalo misal ini katakan lah saldonya cukup yaa untuk 3 transaksi tadi dan 3 transaksi tadi jalan barengan. apabila nanti diupdate saldonya pakek query jumlah saldo terakhir, berarti yg mana transaki pertama berhasil dan transaksi kedua dan ketiga gagal juga yaa?

  • @fathur208
    @fathur208 8 місяців тому

    Kang mau tanya, klo kita pakai arsitektur microservices berbasis API apakah bisa melakukan transaction locking? Atau apakah harus menggunakan basis event driven?

  • @MrSundaayy
    @MrSundaayy Рік тому

    dari dulu sempet kepikiran begini sih, ternyata istilahnya ini dan cara menanganinya begitu. Kalo sistem flashsale di marketplace itu pake ini juga ya?

    • @egipebriyawan1455
      @egipebriyawan1455 5 місяців тому

      harusnya iya ya, kalau gak pake locking amsyong iphone kuotanya 10 tapi yang berhasil checkout 1000 orang 😁

    • @egipebriyawan1455
      @egipebriyawan1455 5 місяців тому

      harusnya iya ya, kalau gak pake locking amsyong iphone kuotanya 10 tapi yang berhasil checkout 1000 orang 😁

  • @trisna_cb
    @trisna_cb Рік тому +1

    Mas, untuk saldo itu memang bagusnya disimpen di field ya mas? Soalnya saya ngitung saldo manual, select sum income - expense
    Apa dampaknya kalo misalkan saya terus menggunakan metode itu dalam hal saldo?

    • @ProgrammerZamanNow
      @ProgrammerZamanNow  Рік тому

      kalo transaksinya udah ratusa ribu kali gimana?

    • @trisna_cb
      @trisna_cb Рік тому

      @@ProgrammerZamanNow nah itu kurang tahu mas, apakah database nya akan semakin lambat saat query select sum(debit)-sum(kredit)?

    • @arwahsapi
      @arwahsapi Рік тому

      Kalau kecil cukup pakai materialized view kalau engine database nya support (Oracle, PostgreSQL, dll) dan di scheduled refresh. Kalau besar diwarehousekan dulu via ETL.

  • @rumahbejo
    @rumahbejo Рік тому

    Ada kasus untuk firebase realtime dan firestore ?
    .

  • @rezavanessa4284
    @rezavanessa4284 Рік тому

    Pak izin bertanya.. itu lock for update mengunci semua database ? Jadi kalo user pertama lagi nerapin lock for update, user yang kedua bisa query select ke database gak ? Apa harus nunggu user pertama selesai melakukan operasi lock for update ?

  • @achyarca
    @achyarca Рік тому

    logic simple tapi mahal...

  • @absormu929
    @absormu929 Рік тому +1

    pake SELECT FOR UPDATE gimana mas?

  • @Danny-gv3tu
    @Danny-gv3tu Рік тому

    race condition gini apakah bisa disolve dengan event-driven architecture?
    jadi tiap ada transaksi / permintaan checkout, kita insert ke tabel transaction, tapi tandai sebagai "belum beres checkout", lalu publish event untuk lakukan update saldo sebanyak +/- nilai transaksi, kalau berhasil, baru tandai transaksinya "beres checkout"

    • @dewigesrek5651
      @dewigesrek5651 Рік тому +2

      kyknya pake event driven pun masih bisa bro kena race

    • @pramusintokhanif5979
      @pramusintokhanif5979 Рік тому +1

      pakai event driven masih bisa kena dan karena saya sndri mengalami

  • @muhammadwidyan4413
    @muhammadwidyan4413 Рік тому

    kalau pakai queue seperti kafka untuk handle race condition apakah bisa kang?

  • @sidikridwan
    @sidikridwan Рік тому

    Bagaimana cara menentukan fields seperti saldo pada contoh ini apakah field itu adalah data yang akan di update( data yang bergerak) atau ada kriteria tersendiri? Makasih

  • @indra_5629
    @indra_5629 Рік тому +1

    Berarti ini implementasi nya sama juga untuk stok gitu ya bang?

  • @joshuamartua9214
    @joshuamartua9214 Рік тому

    GELOOO daging

  • @fauzifadhillah3222
    @fauzifadhillah3222 Рік тому

    kalo aku biasanya di postgres, pake decrement
    update table set saldo = saldo - 1000 where user_id = 1
    terus di combine sama constraint check di db 'saldo > 0'
    bisa juga kan ya temen temen? ato tetep ada bolongnya?

    • @ahmadganteng7435
      @ahmadganteng7435 6 місяців тому

      Masuk akal juga..
      Keren..

    • @luckyardhika3781
      @luckyardhika3781 4 місяці тому

      tetep bolong bg kalo saldonya ada 100k, tetep masuk kualifikasi saldo > 0

  • @juditnugroho4306
    @juditnugroho4306 Рік тому

    kalau db slave laging apa kalau pakai locking db itu bisa ya mas? Atau harus ada cara lain?

  • @trisna_cb
    @trisna_cb Рік тому

    Mas mau tanya lagi, kalo cara nanganin transaksi yang pending gimana?
    Misalkan kita API ke aplikasi aplikasi B (misal Payment Gateway), dan di kita dicatat sebagai saldo. Kita ga tahu aplikasi B akan mengirimkan status berhasil atau gagal. Dan kadang kalo transaksi expired si aplikasi B nya ga ngirim status apapun

    • @Lukmandst
      @Lukmandst 11 місяців тому

      mungkin bisa dihandler dari aplikasi a sendiri, misal expired dari b itu 30 menit. Jadi dari aplikasi a kalau ngga dapet feedback dari aplikasi b lebih dari 30 menit bakal otomatis update status jadi expired

  • @helhel5516
    @helhel5516 Рік тому

    Bagaimana jika locking nya menggunakan redis pak? apakah bisa juga?

    • @nurcahyaari
      @nurcahyaari Рік тому

      bantu jawab, bisa. saya biasanya lockingnya pakai distribtued lock punya Redis

  • @invitationforyouu
    @invitationforyouu Рік тому

    Ahha gue punya ide jahat 🗿

  • @user-mn9rm8lx8l
    @user-mn9rm8lx8l Рік тому

    link a boss

  • @qoisdzulfikarnugroho8357
    @qoisdzulfikarnugroho8357 Рік тому

    ini apa sama dengan deadlock ya? apa beda?

    • @jshadinata
      @jshadinata Рік тому

      berbeda.
      race condition ini efeknya inconsistency data
      solusinya: pakai transaction / lock
      tapi transaction / lock dapat menyebabkan deadlock.
      biasanya aplikasi yg trafficnya besar yg mengalami deadlock.

  • @arifsubarkah9569
    @arifsubarkah9569 Рік тому

    Pas banget, lg nemuin bug ini kmaren. Di production pula wkwk. Cuman untuk data stok barang.

  • @guseggster
    @guseggster Рік тому

    sorry oot, itu app yg dipake gambar apa ya namanya?

  • @dlandsvolka4046
    @dlandsvolka4046 Рік тому +2

    Terima kasih.