Logo
Published

References

Database

  • SQL
    • Consitent, ACID
    • Row based
    • Cocok untuk data yang terstruktur
  • NoSQL
    • Type
      • Doc store (MongoDB)
        • Pengganti relasi, embed or lookup
      • Graph
      • Key Val (Redis)
    • Scalable, flexible
    • Expressive query?
    • Schemaless
    • Example
      • MongoDB
      • Casandra

Common Best Practice

  • Write in English (table, column, index)
  • Table menggunakan plurals
  • Snake case
  • InnoDB vs MyISAM
    • InnoDB: ACID
    • MyISAM: Lack of ACID, read heavy performance

Normalisasi vs Denormalisasi

  • Olap buat dashboarding
  • Normalized adalah untuk merapikan data kedalam structure yang jelas
  • Transactional adalah perecord an ulang sebuah data kedalam table lain dengan tujuan mencegah perubahan data

How to Normalize

  • Think data as entity or model or even real objects
  • Knowing data flows

Catatan Memastikan schema cukup scalable dengan revisit schema nya, dengan membayangkan jumlah data yang besar di masa depan

Indexing Strategy for Performance

Types

  • Primary key: otomatis ke index
  • Secondary index: seperti unique, foreign key
  • Composite index: penggabungan dari beberapa column
  • Covering index:
  • Partial index:
  • Full-text index: bisa search isi content text

Rule of thumb

  • Foreign key
  • Untuk complex query bikin composite index
  • Most common query column ada frequent perlu diindex
  • Kalau datanya dikit ngga pengaruh ke performance, kadang diawal kita ngga tau apa yang perlu diindex
    • Contoh

Common Pitfalls

  • Over indexing, semua nya diindex. Bikin slow db read dan write
  • Explain Analyze to inspect index efficiency

Don’ts

  • Modifying index in large or high trafic, try use gh-ost

Query analysis

  • Use explain query

Tujuan Indexing

  • Mencegah scanning seluruh rows, sehingga checking ke collection indexing yang terbuat
  • Ngga mempengaruhi kecepatan jika ngga terpakai, cuma makan size. Kecuali ada kenaikan data bulk

Best Practice

  • UUID as a primary key, debatable karena biasanya pakai auto increment
  • UUID is slower dan ga bisa di sort
  • Not using foreign key
  • Soft delete, biasanya untuk data transaksi
  • Using propert data type
    • Jangan spam 255
    • BigInt as PK
      • BigInt bisa auto increment, tergantung database yang digunakan
    • Use number as a replacement of enum, maintain flexibility
  • Select only column needed

Encryption

Banyak database modern mendukung enkripsi bawaan:

  • MySQL: Mendukung enkripsi data saat istirahat (data at rest) menggunakan fitur seperti Transparent Data Encryption (TDE).
  • PostgreSQL: Mendukung enkripsi melalui ekstensi seperti pgcrypto atau fitur enkripsi data transparan (TDE) di versi yang lebih baru.
  • MongoDB: Mendukung enkripsi data saat istirahat (data at rest) dengan menggunakan enkripsi di tingkat penyimpanan.
  • SQL Server: Mendukung TDE dan fitur enkripsi lainnya.
  • Oracle: Mendukung TDE dan berbagai opsi enkripsi lainnya.

Scaling Infra

Connection pooling. Ketika client akses db, db akan melakukan open connection ketika ada yang akses dan close ketika selesai, connection pooling menyediakan connection yang stay open dan tersedia biar ngga perlu buka tutup berulang

Berapa jumlah pool: core_count * 4

Scaling Up

Upgrade resource Replicate read server

  • Bisa terjadi replication lag, biasanya sering terjadi misal ada mass insert. Cara fix nya dengan menggunakan condition jika tidak ditemukan maka cari di read server yang lain Sharding

OLAP & OLTP

  • Historical data OLAP
  • Mysql atau common DB itu OLTP

Homework: Sabtu jam 5

CleanShot 2025-03-12 at 22.11.22@2x.png

Submit to: https://docs.google.com/presentation/d/1ktx-PtW4XH9oyQso__rwYTaegeRJ4sjhPcLk7bni7po/edit#slide=id.g3356a26a682_0_336

Training System Architect D3 Homework

List Question

  • Apakah jika indexing date berguna jika where nya bukan equal melainkan more than?

References

© 2025 All rights reservedBuilt with Flowershow Cloud

Built with LogoFlowershow Cloud