Преимущества перед AI
- Сокрытие информации. Если кто-то видит, что в вашей системе есть, например, пользователь с ID 42, он может понять, что в системе как минимум 42 пользователя, а также что в системе скорее всего есть пользователи 41 и 43. По UUID он мало что поймёт.
- Источник идентификатора. UUID может быть сгенерирован как на стороне приложения, так и на стороне СУБД. В случае с автоинкрементом, только на стороне СУБД.
- Шардирование. Во многом выходит из предыдущего пункта. Держать распределённый счётчик часто тяжело, и с увеличением числа узлов будет страдать быстродействие системы. С UUID такой проблемы нет.
- Репликация и распределение: UUID хорошо подходят для распределенных систем, так как они позволяют генерировать уникальные ключи в разных узлах без необходимости координации. Это может улучшить масштабируемость и упростить репликацию данных.
Недостатки
- UUID версий 1, 2, 3, 4 и 5 не являются монотонно возрастающими. Если использовать эти версии в качестве первичных ключей, вставки будут случайными, а данные будут разбросаны по диску (для InnoDB). Со временем, по мере увеличения размера базы данных, поиск будет происходить все медленнее и медленнее.
Производительность индексации: Поскольку UUID не являются последовательными, они могут привести к частой фрагментации индексов. Это может замедлить операции вставки, так как индексные структуры (например, B-деревья) становятся менее эффективными при размещении неупорядоченных ключей - Размер первичного ключа.
Новые версии
https://uuid.ramsey.dev/en/stable/rfc4122/version6.html#rfc4122-version6
https://uuid.ramsey.dev/en/stable/rfc4122/version7.html#rfc4122-version7
6 и 7 версия UUID лишина недостатков:
- Разбросанные записи в базе данных
- Невозможность сортировки по идентификатору (например, в порядке вставки)
Version 6 UUIDs provide an excellent solution for those who need monotonically increasing, sortable UUIDs with the features of version 1 UUIDs (MAC address and clock sequence), but if those features aren’t necessary for your application, using a version 6 UUID might be overkill.
Version 7 UUIDs combine random data (like version 4 UUIDs) with a timestamp (in milliseconds since the Unix Epoch, i.e., 1970-01-01 00:00:00 UTC) to create a monotonically increasing, sortable UUID that doesn’t have any privacy concerns, since it doesn’t include a MAC address.