Question

Je cherche à construire une solution de magasin qui doit être évolutive. Actuellement, il récupère 1-2000 commandes en moyenne par jour dans plusieurs magasins basés pays (par exemple au Royaume-Uni, nous, de, dk, es, etc.), mais cet ordre pourrait être 10 fois ce montant en deux ans.

Je suis à la recherche soit en utilisant les bases de données pays-shop séparés pour stocker les tables de commandes, ou qui cherchent à combiner en une table de commande.

Si toutes les commandes existent dans une table avec un ID global (num auto) et l'ID de pays (Royaume-Uni par exemple, de, dk etc.), chaque pays commandes devrait également avoir la commande séquentielle. Donc, en substance, nous aurions dû avoir un ID global et un numéro de commande de pays, avec le pays pour être ID séquentiel pour les pays que, par exemple

ID global = 1000, pays = Royaume-Uni, de l'ordre de pays ID = 1000
global ID = 1001, pays = DE, ordre de pays ID = 1000
global ID = 1002, pays = DE, ordre pays ID = 1001
global ID = 1003, pays = DE, ordre de pays ID = 1002
global ID = 1004, pays = Royaume-Uni, l'ordre national ID = 1001

L'ID global serait DB généré et non quelque chose que je aurais besoin de se inquiéter. Mais je pense que je dois faire une requête pour obtenir l'ordre actuel du pays ID basé + 1 pour trouver le prochain numéro séquentiel. Deux choses me préoccupe à ce sujet: 1) les temps de requête lorsque la table a potentiellement des millions de lignes de données et je fais une lecture avant une écriture, 2) le potentiel de conflits de numéro d'identification due à des écritures / lectures simultanées

Avec une table MyISAM la table entière pourrait être bloquée alors que le dernier ordre du pays + 1 est récupéré, pour éviter les conflits de numéro d'identification.

Je me demande si quelqu'un sait d'une solution plus élégante?

Cordialement, imanc

Était-ce utile?

La solution

Il y a une façon de le faire.

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

Cela met un nouvel ordre pour le Royaume-Uni en, il sélectionne le plus grand code de commande ajoute un un. Cela a été testé, et tout ce qui doit être changé est les noms des tables et des champs

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top