Golang Indonesia 🇲🇨
D Noor

Pak terangin dong
read committed => naon?
repeatable read => naon?
serializeable => another naon?

'Availability'

D Noor

ck!

pelid

DM nih kalo ga mau.

Oke baru baca
read committed => Ga bakal baca dari write yang belum beres. Cuma yang udah di-commit aja.

repeatable read => Dalam transaksi kalo ada 2x read bakal ngehasilin hal yang sama. Sementara kalo read committed aja kalo ada transaksi lain yang ngubah rownya, maka bisa jadi read kedua berubah.

Reinaldy

ada juga level snapshot, tapi di yugabyte disamain sama repeatable read

meanwhile kalo sql normal yang kek postgres, mysql ada read uncommited, satu level dibawah read commited

D Noor

serializable => Dalam satu transaksi, transaksi lain harus nunggu kalo ada row yang lagi di-lock. Statenya ga akan berubah.

Reinaldy

kalo mssql, lebih banyak lagi isolation levelsnya

D Noor

read uncommitted gawat juga kalo masih otw

Makannya transaction jangan lama-lama lah ya.

Kalo bisa pake atomic operations aja.

D Noor

plus kalo pake NewSQL jangan pake AUTO INCREMENT karena akan jadi hotspot mas @Ramad987

Reinaldy
D Noor

ga bisa enggres mz

halah boong aja om ini wkwkwk

D Noor

Zaman old bikin aplikasi harus lock-lock di DB lama, bahkan stored procedure panjang.

Zaman sekarang saya nyari cara yang atomic aja. Hahahaha.

Reinaldy
D Noor

Kalo bisa pake atomic operations aja.

serializable itu ngejamin consistency, tapi ada drawback di performance. kalo misalnya 1 table punya write rps yang banyak banget, bisa jadi bottleneck

Cuma bermasalah kalo domain objectnya adalah hasil agregasi beberapa tabel.

Pas lagi operasi Save harus ngelock beberapa tabel.

Reinaldy

even di cluster deployment. misal deploy 5 node. ya kalo bikin transaction pake level serializable, consistency terjamin, tapi kita harus nunggu sampe data beneran ke write ke 5 node itu

Reinaldy

yang paling pusing di newsql itu kalo bikin JOIN query, tapi clusternya di sharding

D Noor

Kalo ga serializable, bisa baca dari node lain tapi datanya belum quorum.

Ramad

Ooh bagian ini ga ke hindarin juga berarti ya

enggak mas, soalnya kalo AUTO INCREMENT artinya harus tau state dari row sebelumnya.

Reinaldy

ada yang lebih pusing lagi: kalo database lost quorum, what should you do? wkwkkw

D Noor

kalo statenya masih dalam keadaan di lock, ya berarti harus nunggu laig.

SAMA AJA *kabur

Reinaldy
D Noor

Matiiin, recover, replay.

hooo tidak semudah itu

D Noor
D Noor

Cuma bermasalah kalo domain objectnya adalah hasil agregasi beberapa tabel.

Ini makanya kalo bisa domain object jangan banyak2 tabelnya. Problemnya RDBMS itu enakan di-JOIN daripada bikin array dalam satu field.

Belum lagi kalo split brain 😛

yang bener mana ini...

Ramad
D Noor

enggak mas, soalnya kalo AUTO INCREMENT artinya harus tau state dari row sebelumnya.

Waktu itu client ttp mauny pake auto increment, akhirny diatur sequencingny, increment +100, starting point masing2 db beda

tapi AUTO INCREMENT itu memaksa sesuatu yang stateless jadi stateful.

bahkan masih ada yang mikir kalo primary keynya bukan integer itu lembet.

Padaha uuid itu ya integer juga. Cuma 128 bit.

Cuma ya ... ga urut aja hahaha.

dari tadi nyari di docs yugabyte sama cockroachdb ga nemu. yowes ambil dari rqlite aja wkwkwk

D Noor

bahkan masih ada yang mikir kalo primary keynya bukan integer itu lembet.

ada yang lebih parah. mikir kalo walaupun ada UUID jadi ID, harus tetep ada column ID yang AUTOINCREMENT wkwkwkwkwk

Saya sekarang sih: data yang unique saya akan jadiin key :))

Ga harus UUID kecuali memang perlu ID.

Reinaldy
D Noor

Ya sama aja dong. Maksain sesuatu yg stateless jd stateful.

iya. padahal developer udah provide UUID

Moses Kurniawan

mwekekekeke iya di program rewrite pake ini

Reinaldy

tapi masih ada aja role sebelah yang maksa AUTOINCREMENT

D Noor

ada, rolenya ARCHITECT bukan?

D Noor

bodo amat mau VARCHAR juga, zaman now CPU dah kenceng. Lagian index itu kan pake b+tree kan, ya masak selemot itu.

*kemudian saya ingat, kalo VARCHAR nya unicode, brengsek juga krn urutannya ... jadi ga urut.

Reinaldy

System Analyst

ya 10-13 lah 😛

D Noor

Binary data juga bisa di-indeks, tapi indeksnya ga ada konteks (collation) nya. Jadi nurut urutan binernya aja.

Kalo ada collation, jadi ada konteksnya: misalnya e dan ë harus satu urutan, ga boleh sehabis z.

Ramad

+1

Karena domain modelnya jadi enak mas. Bisa disimpen sekali, ga perlu query dulu id nya berapa. Jadi bisa satu trx tanpa select.

Kalo enggak, domain modelnya jadi kotor, karena harus nyimpen idnya juga di situ. Padahal itu id dipake buat keperluan storage aja.

Ramad

Mayan panjang bahas bukan golang, ga diomelin admin? Haha

ã…¤ ã…¤

gw sih gpp '__')

related kan

gw sih gpp database tertentu auto increment, 200rb rps, ga tembus juga jumlah writenya

bottlenecknya bukan di situ

ã…¤ ã…¤

yes single machine

16 core

Ramad
ã…¤ ã…¤

yes single machine

Postgre? Mysql? Mssql?

ã…¤ ã…¤

tarantool

kalo multimaster baru terpaksa no auto increment

Reinaldy
ã…¤ ã…¤

bottlenecknya bukan di situ

bottlenecknya dimana? network io?

ã…¤ ã…¤

di layer depannya lagi

ga bisa utilize fully 200K rps XD

Ramad
ã…¤ ã…¤

tarantool

Kirain, afaik ga kuat dbms spek segitu untuk rps sgitu

ã…¤ ã…¤

harus spawn lebih dari 1 instance buat utilize

yes dbms biasa paling 40K rps

jadi bottleneck pertama ya di database XD bukan di backend/api

api gw cuma bisa 70K rps per instance

Di tech empower benchmark max data update aja 24k

D Noor

ya elah, 70K ya udah lah

ã…¤ ã…¤

tarantool tetep + api

iyes, makannya ga perlu bashing auto increment XD

16 core, nvme biasa

Ramad
D Noor

ya elah, 70K ya udah lah

Di allo ada mas product yg sampe segitu? Rahasia perusahaan ga ya, haha

ã…¤ ã…¤

udah banyak yg balik sadar server gede 2 lebih ok daripada rent spawn vm server kecil2

lebih ga lelah maintainnya

Ramad
ã…¤ ã…¤

lebih ga lelah maintainnya

Yg banyak2 melelahkan y, bnyk vm, bnyk repo, bnyk service

kecil2 dan banyak

Tar tinggal dikonsolidasi hehhee.