Pregunta

Estoy buscando en la construcción de una solución de tienda que tiene que ser escalable. Actualmente se recupera 1-2000 órdenes en promedio por día a través de múltiples tiendas basadas país (por ejemplo, Reino Unido, EE.UU., DE, DK, ES, etc.), pero este orden podría ser 10 veces esta cantidad en dos años.

Estoy buscando en las bases de datos, ya sea usando país-shop separadas para almacenar las tablas de órdenes, o en busca de combinar todo en una tabla de pedidos.

Si existen todas las órdenes en una mesa con una identificación global (num automático) y identificador de país (por ejemplo Reino Unido, Alemania, Dinamarca, etc.), también tendría cada uno de los países órdenes tener ordenación secuencial. Así que en esencia, tendríamos que tener una identificación global y una identificación de la orden país, con el fin de ser país ID secuencial para los países solamente, por ejemplo,

ID = 1000 mundial, país = Reino Unido, país para ID = 1000
Identificación global = 1,001, país = DE, para el país ID = 1000
Identificación global = 1,002, país = DE, para el país ID = 1001
Identificación global = 1,003, país = DE, para el país ID = 1002
Identificación global = 1,004, país = Reino Unido, país para ID = 1001

El ID global sería DB genera y no es algo que tendría que preocuparse. Pero estoy pensando que tendría que hacer una consulta para obtener el orden actual de país basado en la ID + 1 para encontrar el siguiente número secuencial. Dos cosas me preocupación por lo siguiente: 1) los tiempos de consulta cuando la tabla tiene potencialmente millones de filas de datos y estoy haciendo una lectura antes de una escritura, 2) el potencial para un número de identificación enfrentamientos debido a las escrituras simultáneas / lee

Con una tabla MyISAM la tabla entera podía ser cerrada mientras que la última orden del país + 1 se recupera, para evitar choques de identificación de números.

Me pregunto si alguien sabe de una solución más elegante?

Cheers, imanc

¿Fue útil?

Solución

Hay una manera de hacer esto.

INSERT INTO test123 (`Country`, `Country order code`)
SELECT 'UK', MAX(`Country order code`) + 1
FROM test123
WHERE `Country` = 'UK'

Esto pone un nuevo pedido para el Reino Unido en, se selecciona el código de orden más alto de una suma uno. Esto ha sido probado, y todo lo que hay que cambiar es el nombre de las tablas y los campos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top