Big Data - MYSQL - Petani KodePada terbitan sebelumnya saya sudah pernah membahas keterbatasan AUTO_INCREMENT di MySQL. AUTO_INCREMENT sangat bergantung pada tipe datanya. Kita tidak bisa menggunakannya untuk data yang tak terhingga (unlimited), karena terbatas. Sebagai gantinya, kita harus membuat fungsi generator ID yang mampu membuat ID yang unik.

Pada kesempatan yang lain, saya juga pernah membuat generator ID yang mirip seperti ID video Youtube. Namun, saya belum yakin sepenuhnya dengan ID unik yang dihasilkannya. Mungkin saja, suatu saat nanti generator ini akan membuat ID yang sama. Seperti halnya fungsi bawaan PHP, uniqid(). Fungsi ini memang menghasilkan ID yang unik. Akan tetapi, masih meragukan, karena kita telah diperingatkan pada dokumentasinya.

Warning
This function does not guarantee uniqueness of return value. Since most systems adjust system clock by NTP or like, system time is changed constantly. Therefore, it is possible that this function does not return unique ID for the process/thread. Use more_entropy to increase likelihood of uniqueness.
Kalau begitu, apa solusinya?

UUID atau GUID

UUID merupakan singkatan dari Universally Unique Identifier. Sedangkan GUID, singkatan dari Globally Unique Identifier. UUID dan GUID adalah hal yang sama. Perbedaanya, GUID itu merupakan implementasi dari UUID yang dilakukan oleh Microsoft. UUID terdiri dari 32 digit bilangan desimal yang dipisahkan dengan tanda hyphens (-), 8-4-4-4-12 sehingga total semuanya adalah 32 karakter. Contoh UUID:
123e4567-e89b-12d3-a456-426655440000
UUID memiliki beberapa versi, yaitu versi 1, 2, 3, 4, dan 5. Versi 4 digunakan untuk nilai acak (random). Ini bisa kita manfaatkan untuk nilai Primary Key. Menurut penjelasan Wikipedia, setelah membuat 1 miliar UUID untuk setiap detik, kemungkinan untuk terjadi duplikasi nilai yang sama untuk 100 tahun berikutnya adalah 50%.

Fungsi Generator GUID

Sekarang kita coba membuat sebuah fungsi generator GUID di PHP. Fungsi ini bisa kita manfaatkan untuk pengisian nilai Primary Key.
<?php
function guidv4()
{
    if (function_exists(‘com_create_guid’) === true)
        return trim(com_create_guid(), ‘{}’);

    $data = openssl_random_pseudo_bytes(16);
    $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
    $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
    return vsprintf(‘%s%s-%s-%s-%s-%s%s%s’, str_split(bin2hex($data), 4));
}
Hasil ketika mengeksekusi fungsi tersebut:


Jadi, gunakanlah UUID untuk nilai primary key bila data anda terlalu banyak, supaya tidak menjadi masalah di masa depan.

Referensi