Domanda

Ho pensato di implementare questo sistema, ma non posso fare a meno di sentire che c'è un problema da qualche parte. Uno dei punti dell'utilizzo di GUID sull'incremento di int è che, in futuro, se si unissero i database insieme, non si verificherebbero conflitti sulla chiave / identificatore primario. Tuttavia, il mio approccio è impostare la dimensione dell'incremento su X, dove X è il numero di server che molto probabilmente avrò in futuro. Quindi, su ciascun server, fare in modo che il seed sia un incremento rispetto al numero di seed sul server precedente. In questo modo, durante l'unione, non ci sarebbero scontri con la chiave primaria. È un metodo sicuro e normale o sono diventato mentale :)? Grazie

È stato utile?

Soluzione

Nella replica SQL multi-master, in genere hai le chiavi primarie definite come:

  • GUID
  • int ha una dimensione di incremento > numero di installazioni
  • int ha un offset fisso

L'aspetto negativo dei GUID è che possono essere più difficili da leggere e occupare leggermente più spazio. Tuttavia, ti consente di ridimensionare in n istanze.

I numeri interi sono un po 'più facili da gestire. Hanno anche il vantaggio di essere in grado di dire facilmente quale server ha creato un record. Il rovescio della medaglia è che è necessario prevedere il numero massimo di database che potrebbero essere uniti o indovinare il numero massimo di righe che una singola istanza potrebbe inserire.

Un esempio di offset fisso è: il sito A inizia da 0, il sito B inizia da 1.000.000 e il sito C inizia da 2.000.000. Questo schema funziona bene fino a quando un sito inserisce un milione di righe. Questo schema potrebbe funzionare bene per le auto presso i concessionari di automobili, dove è improbabile che un concessionario possa mai vendere più di 1.000.000 di auto, e potresti avere centinaia di concessionari nel corso della vita dell'applicazione.

Altri suggerimenti

Ciò che mi spaventa qui è il tuo uso di " molto probabilmente " ;. Stai assumendo il futuro qui, e in genere non è una buona cosa avere a che fare con cose come questa. Perché non usare un GUID?

Che cosa succede se aggiungi un server aggiuntivo rispetto a quello che pensavi di avere? Ho potuto vedere le cose diventare molto complicate molto rapidamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top