Voglio creare una tabella di grandi dimensioni (circa 45 miliardi di righe) a cui si accede sempre da una chiave univoca.Hashset equivalente in SQL Server
Al di fuori del DB, la struttura migliore per contenere questo è un dizionario o un hashset, ma ovviamente a causa delle dimensioni dei dati, non è possibile farlo al di fuori del database.
SQL Server fornisce una struttura ottimizzata per l'accesso con valori-chiave? Capisco che una chiave cluster è molto veloce, ma è ancora un indice e quindi ci saranno alcune letture del disco aggiuntive associate alle pagine di indice di attraversamento. Quello che vorrei ottenere da SQL Server è una struttura "nativa" che memorizza i dati come coppie chiave-valore e rende quindi possibile accedere ai valori in base alle chiavi.
In altre parole, la mia domanda è come archiviare in SQL Server 45 miliardi di righe e accedervi in modo efficiente SENZA avere un indice, in cluster o non in cluster, perché la lettura dell'indice di pagine non foglia può causare un IO sostanziale e Dal momento che ogni valore può essere richiamato da una chiave univoca, dovrebbe essere possibile avere una struttura in cui l'hash di una chiave si risolve in una posizione fisica del valore. Per ottenere 1 valore, dovremmo fare 1 lettura (a meno che non ci siano collisioni hash).
(un equivalente in Oracle è Cluster Hash)
Grazie per il vostro aiuto.
Attraversare un b-tree probabilmente non è molto meno efficiente di generare un valore hash e la ragione per cui gli indici cluster sono così importanti in SQL Server è che le righe di dati sono archiviate a livello foglia. Quindi la lettura che colpisce la foglia b-tree per la tua chiave di indice legge anche la riga di dati per quella chiave – Rick
Questa risposta è corretta. I livelli dell'indice intermedio saranno piccoli e completamente memorizzati nella cache. Fondamentalmente, qualsiasi risultato ottenuto da PK in tale tabella richiederà al massimo un IO. A differenza dell'utilizzo di un hash-table su disco, potrai anche trarre vantaggio dalla località chiave. – usr
Suggerimento casuale: se sei veramente, veramente, solo al 100% solo a ricerca di valori-chiave, e mai a QUALSIASI tipo di query relazionali, forse SQL non è la tua risposta? Dai un'occhiata a Redis: è incomprensibilmente veloce, transazionale, coerente, persistente su disco, facile da configurare - sembra che potrebbe essere una soluzione migliore. http://redis.io –