Collisioni guidate

4

Ho un prodotto che consente agli sviluppatori di giochi di creare giochi. All'interno dei loro giochi sono tenuti a fornire tutti gli elementi dei GUID dei loro giochi. Ho detto loro che hanno bisogno di generare i loro guids usando un meccanismo specifico, ma sembrano pensare che non causerà alcun problema. Ciò di cui mi preoccupo sono le collisioni GUID tra i giochi.

Alcuni sviluppatori incrementano solo in sequenza l'ultima cifra del GUID, altri zerano fuori l'ultimo blocco e incrementano altre parti, altri ancora solo un insieme casuale di numeri e lettere per ognuno.

Il mio argomento è che facendo ciò aumenta notevolmente il rischio di scontrarsi con altri giochi che seguono sia lo standard sia quelli che non lo fanno.

Proprio come a guardare ci sono potenzialmente centinaia di migliaia di GUID coinvolti qui.

Ho ragione nel pensarlo, o è davvero improbabile che ciò accada davvero?

    
posta Kelly Elton 17.06.2013 - 20:23
fonte

3 risposte

3

Dato che non hai il controllo sulla creazione di guid devi aspettarti che ci sarà una collisione ad un certo punto (se non ce ne è già uno) e devi aspettarti che ci saranno sviluppatori alle prime armi che non guarda perché iniziare da 1 e contare è un problema.

Per renderlo impossibile dovresti rilasciare tutti i guidi tu stesso.

Tuttavia, dal momento che le persone possono accedere agli oggetti di altre persone semplicemente con un singolo ID, hai anche un grosso buco di sicurezza in attesa di essere sfruttato e, a seconda di come scegli di risolverlo, questo problema potrebbe risolversi in un punto controverso. / p>     

risposta data 17.06.2013 - 22:00
fonte
3

I've told them that they need to generate their guids using a specific mechanism

Sei al potere? Rifiuta il codice non usando il tuo meccanismo.

Se l'utilizzo del meccanismo è un requisito, allora è sbagliato che gli sviluppatori non lo usino. Ma potresti voler dare loro un'implementazione facile.

Btw. se il tuo prodotto lascia che i programmatori creino giochi, perché non lasciare che il tuo prodotto generi i guids?

    
risposta data 18.06.2013 - 09:23
fonte
0

C'è un paio di cose da notare.

Avrai delle collisioni. Anche se matematicamente improbabili, sono ancora possibili. E data la legge di Murphy, finirai per vedere l'improbabile diventare realtà nel momento più inopportuno, come quando stai provando a finire. Se stai usando qualsiasi tipo di algoritmo di hash, devi essere consapevole del fatto che a un certo punto si verificherà una collisione hash e che occorrerà un processo per risolverlo. Spesso si tratta solo di aggiungere altre informazioni univoche nell'hash.

Se stai permettendo alle persone di generare i propri ID di hash. Sei dentro per un mondo di dolore. Deve esserci un modo per dati di hashing, e in questo modo deve fornire abbastanza "unicità" per minimizzare le collisioni. O quello o si utilizza una fabbrica GUID centralizzata che distribuisce GUID univoci. Naturalmente, ci sono vari problemi di threading con questo approccio.

Sebbene si possa semplicemente avere una GUID factory per thread, e dare ad ogni factory GUID un punto di partenza diverso di qualche miliardo di ID distanti l'uno dall'altro. Questo può anche essere un modo pratico per capire quale thread è esploso.

La vera risposta a "quale approccio" dovresti prendere dovrebbe provenire da come funziona il tuo sistema di risorse. Se si utilizza un sistema di risorse asincrono centralizzato (e si dovrebbe essere), è possibile assegnare GUID a quel punto. Se stai creando oggetti casuali in tutto il negozio in vari thread, allora devi andare con una delle altre opzioni sopra.

    
risposta data 18.06.2013 - 03:52
fonte

Leggi altre domande sui tag