Я знаю, що такого типу питань виникає багато, але я ще не перечитав жодних переконливих аргументів, щоб допомогти мені прийняти це рішення. Будь ласка, нехай зі мною!
У мене величезна база даних - вона зростає приблизно на 10 000 000 записів на день. Дані є реляційними, і з міркувань продуктивності я завантажую таблицю BULK COPY. З цієї причини мені потрібно генерувати ключі для рядків, і я не можу покластися на стовпець ІДЕНТИЧНОСТІ.
64-розрядне ціле число - bigint - достатньо широке для мене використання, але для того, щоб гарантувати унікальність, мені потрібен централізований генератор, який би зробив для мене свої ідентифікатори. В даний час у мене є така служба генератора, яка дозволяє сервісу резервувати X послідовних номерів і не гарантує зіткнень. Однак наслідком цього є те, що всі сервіси, які я маю, покладаються на цей один централізований генератор, і тому я обмежений у тому, як я можу розповсюджувати свою систему, і я не радий, що інші залежності (наприклад, що вимагають доступу до мережі), накладені за цією конструкцією. Це було певною проблемою.
Зараз я розглядаю можливість використання послідовних GUID в якості моїх первинних ключів (згенерованих зовні до SQL). Наскільки мені вдалося переконатися в моєму власному тестуванні, єдиним недоліком цього є дисковий простір більш широкого типу даних (який посилюється при їх використанні в індексах). Я не був свідком помітного уповільнення виконання запитів порівняно з альтернативою bigint. Завантаження таблиці за допомогою BULK COPY відбувається трохи повільніше, але не набагато. Мої індекси на основі GUID не стають фрагментарними завдяки моїй послідовній реалізації GUID.
В основному, я хочу знати, якщо є якісь інші міркування, які я, можливо, не помітив. На даний момент я схильний скочити і почати використовувати GUID. Я ні в якому разі не експерт по базі даних, тому дуже вдячний за будь-які вказівки.