Domanda

Sto cercando di memorizzare le matrici in entità Azure Table. Allo stato attuale, l'unico tipo di matrice è supportato direttamente byte-array, limitata a 64k lunghezza. La dimensione è abbastanza, ma mi piacerebbe per memorizzare le matrici di Longs, doppie e timestamp in un'entità.

I può ovviamente lanciare più byte nel tipo richiesto me stesso, ma mi chiedevo se c'è qualche best-practice per raggiungere questo obiettivo.

Per chiarire, queste matrici di lunghezza sono fissi (ad esempio 1000 cellule) associati con una sola chiave.

È stato utile?

Soluzione

Ho cercato di pensare a un bel modo per fare questo altro che il metodo che hai già parlato, e io sono in perdita. La soluzione più semplice che posso venire con è quello di prendere la matrice, serializzare binario e conservare in una proprietà matrice binaria.

Altre opzioni Mi è venuta in mente, ma ha respinto:

  1. Se la memorizzazione in modo nativo è importante, si potrebbe mantenere queste informazioni in un'altra tabella figlio (lo so tabelle Azure non tecnicamente hanno rapporti, ma questo non significa che non si può rappresentare questo tipo di cosa). L'aspetto negativo di questo essere che sarà notevolmente più lento rispetto l'originale.
  2. Prendere l'array, serializzare XML e conservarla in una proprietà di stringa. Ciò significa che si poteva vedere il contenuto della matrice quando si utilizzano strumenti di data explorer 3rd party e si potrebbe correre (inefficiente) interroga quello sguardo per una corrispondenza esatta sui contenuti della matrice.
  3. Lokad cloud per memorizzare i dati. Questo ti porta in sostanza tutta la Non Sei oggetto, serializza binarie e divide i risultati in blocchi 64kb attraverso le proprietà dell'entità tavolo. Questo non risolve i problemi come quello che stai vivendo, ma sarà solo in grado di accedere ai dati utilizzando gli strumenti che supportano questo quadro.

Altri suggerimenti

Ho scritto un client di stoccaggio tavolo Azure, denominata Lucifure Stash, che supporta gli array, enumerazioni, dati di grandi dimensioni, la serializzazione, le proprietà pubbliche e private e campi e altro ancora.

È possibile ottenere in http://www.lucifure.com o da NuGet.

Se avete solo un insieme di valori-chiave per memorizzare, allora si può anche controllare Azure BLOB . Possono piuttosto efficiente memorizzare array di fino a 25M punti tempo-valore per singola blob (con un accesso casuale all'interno del set di dati).

Se si sceglie di memorizzare l'oggetto in deposito blob e hanno bisogno più di una "chiave" per farlo, si può semplicemente creare una tabella azzurro o due o n cui memorizzare la chiave che si desidera cercare e il riferimento alla l'elemento esatto blob.

Perché non memorizzare i valori come stringhe CSV?

Si potrebbe serializzare l'array come una stringa JSON utilizzando il serializzatore NET JavaScript: http://msdn.microsoft.com/en -us / library / system.web.script.serialization.javascriptserializer.aspx

Questa classe ha una proprietà "maxJsonLength" è possibile utilizzare per garantire gli array non superare i 64 KB quando loro erano serializzazione. Ed è possibile utilizzare la stessa classe per deserializzare gli oggetti memorizzati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top