Ho una tabella di Azure in cui i clienti postano messaggi, potrebbero esserci milioni di messaggi in una singola tabella. Voglio trovare il modo più veloce per ottenere i messaggi inviati negli ultimi 10 minuti (che è la frequenza con cui aggiorno la pagina web). Poiché solo la chiave della partizione è indicizzata, ho giocato con l'idea di utilizzare la data & in cui il messaggio è stato pubblicato come chiave di partizione, ad esempio una stringa come un formato di data ISO8601 come "2009-06-15T13: 45: 30.0900000"Il modo più veloce di interrogare gli ultimi articoli in una tabella di Azure?
Esempio pseudo codice:
var message = "Hello word!";
var messagePartitionKey = DateTime.Now.ToString("o");
var messageEntity = new MessageEntity(messagePartitionKey, message);
dataSource.Insert(messageEntity);
, e poi interrogare per i messaggi inseriti negli ultimi 10 minuti come questo (non testata pseudo codice di nuovo):
// Get the date and time 10 minutes ago
var tenMinutesAgo = DateTime.Now.Subtract(new TimeSpan(0, 10, 0)).ToString("o");
// Query for the latest messages
var latestMessages = (from t in
context.Messages
where t.PartitionKey.CompareTo(tenMinutesAgo) <= 0
select t
)
Ma questo sarà preso bene da l'indice? O causerà una scansione completa della tabella? Qualcuno ha un'idea migliore di fare questo? So che c'è un timestamp su ogni oggetto della tabella, ma non è indicizzato, quindi sarà troppo lento per il mio scopo.
Come sidenote, dovresti probabilmente usare qualcosa di più generale come chiave di partizione. Mi piace dove il tuo post appartiene o così. Dai un'occhiata a http://msdn.microsoft.com/en-us/library/windowsazure/hh508997.aspx –
La stessa macchina fa sia gli inserti che la query? In caso contrario, è necessario tenere conto del potenziale disallineamento dell'orologio tra i client. I tick di –