Ikhwan Saputera

Setiap Waktu adalah Belajar, Setiap Tempat adalah Sekolah, Setiap Orang adalah Guru

Friday, October 23, 2020

MySQL UUID vs. INT untuk Primary Key


Ringkasan: tutorial ini memperkenalkan Anda ke MySQL UUID, menunjukkan Anda untuk menggunakannya sebagai Primary Key (PK) untuk tabel, dan membahas pro dan kontra menggunakannya sebagai kunci utama.
 

Pengantar MySQL UUID

UUID adalah singkatan dari Universally Unique IDentifier. UUID didefinisikan berdasarkan RFC 4122, “Ruang Nama URN Pengenal Unik Universal (UUID)).

UUID dirancang sebagai angka yang unik secara global dalam ruang dan waktu. Dua nilai UUID diharapkan berbeda, bahkan mereka dihasilkan pada dua server independen.

Di MySQL, nilai UUID adalah angka 128-bit yang direpresentasikan sebagai string utf8 dari lima angka heksadesimal dalam format berikut:

 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

 

Untuk menghasilkan nilai UUID, Anda menggunakan fungsi UUID () sebagai berikut:

UUID()

 Fungsi UUID () mengembalikan nilai UUID sesuai dengan UUID versi 1 yang dijelaskan di RFC 4122.

Misalnya, pernyataan berikut menggunakan fungsi UUID () untuk menghasilkan nilai UUID:

 

mysql> SELECT UUID();
+--------------------------------------+
| uuid()                               |
+--------------------------------------+
| 965234ad-6a92-11e7-8846-b05adad3f0cr |
+--------------------------------------+

 

MySQL UUID vs. Auto-Increment INT sebagai Primary Key

Yang Pro

Menggunakan UUID untuk kunci utama membawa keuntungan berikut:

  • Nilai UUID unik di seluruh tabel, database, dan bahkan server yang memungkinkan Anda menggabungkan baris dari database yang berbeda atau mendistribusikan database di seluruh server. 
  • Nilai UUID tidak mengungkapkan informasi tentang data Anda sehingga lebih aman digunakan di URL. Misalnya, jika pelanggan dengan id 10 mengakses akunnya melalui http://www.example.com/customers/10/ URL, mudah untuk menebak bahwa ada pelanggan 11, 12, dll., Dan ini bisa jadi target serangan. 
  • Nilai UUID dapat dibuat di mana saja yang menghindari perjalanan bolak-balik ke server database. Ini juga menyederhanakan logika dalam aplikasi. Misalnya, untuk memasukkan data ke dalam tabel induk dan tabel anak, Anda harus memasukkan ke dalam tabel induk terlebih dahulu, mendapatkan id yang dihasilkan, lalu memasukkan data ke dalam tabel anak. Dengan menggunakan UUID, Anda dapat menghasilkan nilai Primary Key dari tabel induk di depan dan menyisipkan baris ke dalam tabel induk dan anak pada saat yang sama dalam sebuah transaksi.


Kontra

Selain kelebihan, nilai UUID juga memiliki beberapa kekurangan:

  • Menyimpan nilai UUID (16-byte) membutuhkan lebih banyak penyimpanan daripada integer (4-byte) atau bahkan integer besar (8-byte). 
  • Debugging sepertinya lebih sulit, bayangkan ekspresi WHERE id = 'df3b7cb7-6a95-11e7-8846-b05adad3f0ae' daripada WHERE id = 10  
  • Menggunakan nilai UUID dapat menyebabkan masalah kinerja karena ukurannya dan tidak diurutkan. 

 

Solusi UUID MySQL

Di MySQL, Anda dapat menyimpan nilai UUID dalam format kompak (BINARY) dan menampilkannya dalam format yang dapat mudah dipahami (VARCHAR) dengan bantuan fungsi berikut:

 

  • UUID_TO_BIN
  • BIN_TO_UUID
  • IS_UUID

Catatan bahwa fungsi UUID_TO_BIN (), BIN_TO_UUID (), dan IS_UUID () hanya tersedia di MySQL 8.0 atau yang lebih baru.

Fungsi UUID_TO_BIN () mengubah UUID dari format yang dapat dibaca manusia (VARCHAR) menjadi format format kompak (BINARY) untuk penyimpanan dan fungsi BIN_TO_UUID () mengubah UUID dari format kompak (BINARY) ke format yang dapat dibaca manusia (VARCHAR) untuk ditampilkan.

Fungsi IS_UUID () mengembalikan 1 jika argumennya adalah UUID format string yang valid. Jika argumen bukan format string yang valid UUID, fungsi IS_UUID mengembalikan 0. Jika argumennya adalah NULL, fungsi IS_UUID () mengembalikan NULL.

Berikut ini adalah UUID format string yang valid di MySQL:

 

aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
aaaaaaaabbbbccccddddeeeeeeeeeeee
{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}

 

Contoh MySQL UUID

Mari kita lihat contoh penggunaan UUID sebagai kunci utama.

Pernyataan berikut membuat tabel baru bernama pelanggan:

 

CREATE TABLE customers (
    id BINARY(16) PRIMARY KEY,
    name VARCHAR(255)
);

 Untuk memasukkan nilai UUID ke kolom id, Anda menggunakan fungsi UUID () dan UUID_TO_BIN () sebagai berikut:

 

INSERT INTO customers(id, name)
VALUES(UUID_TO_BIN(UUID()),'John Doe'),
      (UUID_TO_BIN(UUID()),'Will Smith'),
      (UUID_TO_BIN(UUID()),'Mary Jane');

 Untuk membuat kueri data dari kolom UUID, Anda menggunakan fungsi BIN_TO_UUID () untuk mengonversi format biner ke format yang dapat dibaca manusia:

 

SELECT 
    BIN_TO_UUID(id) id, 
    name
FROM
    customers;   

 Dalam tutorial ini, Anda telah mempelajari tentang MySQL UUID dan cara menggunakannya untuk kolom Primary Key.

 

No comments:

Post a Comment