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?