Ho la seguente tabella di archiviazione di Azure.
Tabella PositionData:
PartitionKey: ClientID + VehicleID
RowKey: GUID
Properties: ClientID, VehicleID, DriverID, Date, GPSPosition
Ogni veicolo registrerà fino a 1.000.000 di entità all'anno per cliente. Ogni cliente potrebbe avere migliaia di veicoli. Quindi, ho deciso di partizionare per ClientID + VehicleID in modo da avere partizioni piccole e gestibili. Quando esegui una query in base a ClientID e VehicleID , l'operazione viene eseguita rapidamente perché stiamo restringendo la ricerca a una partizione.
PROBLEMA:
Il problema qui è che a volte ho bisogno di interrogare solo su ClientID e DriverID . Poiché non è possibile eseguire confronti parziali PartitionKey, ogni singola partizione dovrà essere sottoposta a scansione. Questo ucciderà le prestazioni.
Non posso avere un PartitionKey con tutto ClientID , VehicleID e DriverID perché le query interrogheranno solo su VehicleID OR DriverID , mai entrambe.
SOLUZIONE 1:
Ho considerato di avere un valore memorizzato altrove che rappresentava una coppia VehicleID e DriverID, e quindi avere una PartitionKey ClientID + VehicleDriverPairID , ma che risulterebbe in centinaia di migliaia di partizioni e ci sarà molta unione di dati tra le partizioni nel mio codice .
SOLUZIONE 2:
Avere una partizione per Client + VehicleID e un'altra partizione per Client + DriverID . Ciò significa che l'aggiornamento della tabella è il doppio del lavoro (due aggiornamenti) ma entrambe le query saranno veloci. Inoltre ci saranno dati ridondanti.
Qualcuna di queste soluzioni è valida? Altre soluzioni?