Quando ho giocato per la prima volta con un database NoSQL, ho preso coscienza dell'impatto degli UUID in un sistema distribuito.
MongoDB è impostato su ObjectIDs, ma ho sempre chiesto in quali casi UUID (RFC4122) sarebbe una scelta migliore.
Ho scoperto che gli ObjectID sono fantastici. Non solo sono più piccoli degli UUID risparmiando spazio su disco, ma sono nel complesso più efficienti:
Una volta Mi è stato detto :
contrary to UUIDs, ObjectIds are monotonic ... Monotonic indexes will cause the B-Tree to be filled more efficiently, it allows paging by id and allows a 'default sort' by id to make your cursors stable, and of course, they carry an easy-to-extract timestamp. These are the optimizations you should be aware of, and they can be huge.
Improvvisamente, ho pensato che, mentre UUID potrebbero essere aa YAGNI caso, Mongo objectIds potrebbe essere ottimizzazione della precisione .
Se per prima cosa assegno agli UUID, qualcuno potrebbe affermare che sto sprecando prestazioni / spazio su disco. Tuttavia, se prima scelgo ObjectID, potrei scoprire in seguito che ho bisogno di un ID meno rischioso per la collisione. Il primo riguarda le prestazioni, il secondo le limitazioni del design.
A causa della mia mancanza di esperienza con gli UUID, non sono sicuro se dovrei preoccuparmi di più delle prestazioni o della libertà.
Quale dovrebbe essere la strategia ID predefinita nei progetti in cui i requisiti non sono ancora chiari?
Aggiorna
Sono preoccupato che una caratteristica del fornitore di database (ID) passi nel mio livello di applicazione. Sono troppo paranoico sacrificando l'efficienza per l'indipendenza / l'astrazione?