ordini multi-negozio tavolo e numeri di ordine sequenziale a base di negozio
-
02-10-2019 - |
Domanda
Cerco di costruire una soluzione negozio che ha bisogno di essere scalabile. Attualmente recupera 1-2000 ordini in media al giorno su più negozi a base di Paese (ad esempio per Regno Unito, DE, DK, ES, ecc), ma questo fine potrebbe essere 10 volte tale importo in due anni.
Io sto guardando sia utilizzando i database country-shop separati per memorizzare le tabelle ordini, o in cerca di combinare tutto in una tabella di ordine.
Se sono presenti tutti gli ordini in una tabella con un ID globale (auto num) e l'ID paese (per esempio Regno Unito, DE, DK, ecc), ogni paese gli ordini avrebbe anche bisogno di avere ordine sequenziale. Quindi, in sostanza, ci piacerebbe avere un ID globale e un ID di ordine di campagna, con l'ordine di campagna ID essere sequenziale per i paesi solo, per esempio
ID = 1000 globale, paese = Regno Unito, al fine paese ID = 1000
ID globale = 1001, country = DE, ordine paese ID = 1000
ID globale = 1002, country = DE, ordine paese ID = 1001
ID globale = 1003, country = DE, ordine paese ID = 1002
ID globale = 1004, paese = Regno Unito, al fine paese ID = 1001
L'ID globale sarebbe DB generato e non qualcosa che avrei bisogno di preoccuparsi. Ma sto pensando che avrei dovuto fare una query per ottenere l'ordine corrente del paese ID base + 1 per trovare il numero sequenziale successivo. Due cose mi riguardano su questo: 1) tempi di query quando la tabella ha potenzialmente milioni di righe di dati e sto facendo una lettura prima di una scrittura, 2) il potenziale per numero ID scontri a causa di scritture simultanee / legge
Con una tabella MyISAM l'intera tabella potrebbe essere bloccato mentre l'ultimo ordine del paese + 1 viene recuperato, per evitare che il numero ID scontri.
Mi chiedo se qualcuno sa di una soluzione più elegante?
Saluti, imanc
Soluzione
C'è un modo di fare questo.
INSERT INTO test123 (`Country`, `Country order code`)
SELECT 'UK', MAX(`Country order code`) + 1
FROM test123
WHERE `Country` = 'UK'
Questo pone un nuovo ordine per il Regno Unito in, seleziona il codice d'ordine più alto di un aggiunge uno. Questo è stato testato, e tutto ciò che deve essere cambiato è i nomi delle tabelle e dei campi