Alternativa al incremento automático de la clave primaria en MySQL para la replicación multimaestro

Una aplicación web que estoy especificando tendrá que ser escalable horizontalmente y requerirá un par de servidores MySQL desde el principio (tal vez aumente a más de uno poco después del lanzamiento). Como una clave primaria de incremento automático no es adecuada, me preguntaba qué alternativas usa la gente.

Algo con la fecha tiene más sentido, pero si baja al nivel de milisegundos y asume una ID de servidor de tres dígitos, es un número muy grande:

sssyymmddhhmmssmicros or 001110510143622123456 por ahora, además, quizás le vendría bien otro número al principio para simplificar los ceros iniciales (ID del centro de datos, quizás).

Epoch time lo acorta, pero solo un poco.

¿Qué más hay ahí?

preguntado el 10 de mayo de 11 a las 13:05

3 Respuestas

Creo que lo que estás buscando es UUID (Identificador único universal). En MySQL puede generar UUID con la función uuid ().

SELECT uuid();

Un UUID se ve así 8cb1764a-7b0d-11e0-aaa7-00270e0f8070 ... ¡Lo sé! es muy largo pero funciona.

contestado el 10 de mayo de 11 a las 17:05

Bueno, ¡eso me ha dado algo en qué pensar! Es más grande que mi solución, y estoy un poco preocupado por el impacto en el rendimiento que causará en uniones grandes (pero, de todos modos, no debería usar uniones grandes). Gracias. - Severo...

Creo que lo que buscas son GTID. Son únicos y funcionan con replicación multimaestro en MySQL. un enlace para más detalles!

Respondido el 03 de enero de 17 a las 16:01

Respuesta corta: no desea la replicación multimaestro y probablemente no mysql (eche un vistazo a cassandra). Pero sí, necesitará secuencias que incluyan una identificación maestra. Puede emular secuencias utilizando una tabla separada. Mira cómo PEAR los emula, por ejemplo.

contestado el 10 de mayo de 11 a las 17:05

Echaré un vistazo a algunas alternativas, pero sospecho que no las usaré (en parte por presión externa y en parte porque no exactamente seguro que todavía confío en ellos). También estoy un poco preocupado por usar una tabla para secuencias porque proporciona un único punto de falla. Sin embargo, gracias por tu respuesta. - Severo...

Entonces deberías usar una base de datos que proporcione secuencias de forma nativa. Usar uuid () es usar efectivamente una secuencia, excepto que no son secuenciales. Si solo necesita un identificador único y no es importante que sean incrementales, uuid es la respuesta corta. - miel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.