Ми розглядаємо можливість використання значень UUID як первинних ключів для нашої бази даних MySQL. Дані, що вставляються, генеруються з десятків, сотень або навіть тисяч віддалених комп’ютерів і вставляються зі швидкістю 100-40 000 вставок в секунду, і ми ніколи не будемо робити оновлення.
Сама база даних зазвичай отримує близько 50 мільйонів записів до того, як ми почнемо відбирати дані, тож не масивна база даних, але не крихітна. Ми також плануємо працювати на InnoDB, хоча ми готові змінити це, якщо є кращий двигун для того, що ми робимо.
Ми були готові піти з UUID типу 4 Java, але під час тестування спостерігали дивну поведінку. По-перше, ми зберігаємо як varchar (36), і тепер я розумію, що нам було б краще використовувати двійковий файл (16) - хоча наскільки краще, я не впевнений.
Більше питання: наскільки погано ці випадкові дані псують індекс, коли ми маємо 50 мільйонів записів? Чи було б нам краще, якби ми використали, наприклад, UUID типу 1, де крайні ліві біти були позначені часом? А може, нам слід повністю відмовитися від UUID і розглянути первинні ключі auto_increment?
Я шукаю загальні думки / поради щодо продуктивності різних типів UUID, коли вони зберігаються як індекс / первинний ключ у MySQL. Дякую!