2011-10-30 12 views

risposta

4

La mia risposta nel post collegato riguarda principalmente protobuf-net; tuttavia, dal momento che stai arrivando a questo da java ti consiglio: tienilo semplice.

Per le date, suggerirei di usare solo il tempo (forse millisecondi) in un'epoca (1 gennaio 1970 è tradizionale). Per tempi, solo le dimensioni in quella stessa unità (millisecondi, ecc.). Per i decimali, forse usa il punto fisso semplicemente con il ridimensionamento - quindi forse considera 1,05 come il 1050 lungo e asserisci sempre esattamente 3dp (quindi punto fisso).

Questo è semplice e pragmatico e copre gli scenari più comuni senza complicare le cose.

+0

Thx ... Ho seguito i nostri consigli e ho reso i campi Data da rappresentare come "int64" in proto file e lo convertivo in Data nella mia classe java. – Echo

+0

Questo è quello che normalmente faccio anche io, solo per memorizzare millis da unix epoca. – Jeremy

+0

Raccomanderesti int64 o fixed64? – ticktock

2

Non sono venduto su questa idea, ma io sono in realtà non venduto all'idea di memorizzare le date (che non sono istanti in tempo) come un timestamp, quindi ecco il mio suggerimento.

Converti la tua data in un numero intero leggibile dall'uomo (ad esempio 2014-11-3 diventa 20141103) e memorizza questo valore intero. Contiene esattamente i dati di cui hai bisogno, è semplice da creare e analizzare e occupa uno spazio minimo. Inoltre, è ordinato e ha un mapping one-to-one delle date ai valori validi (concessi, sono possibili numeri non validi, come 20149999, ma questi sono facili da rilevare). Al contrario, ci sono circa 86400 timestamp validi che rappresentano ogni giorno.

NB: C'è un discussion on DBA SE che critica questo metodo di archiviazione della data, ma in quel contesto esiste un tipo di data specializzato, che ovviamente non è il caso qui.

Problemi correlati