2016-03-31 40 views
10

Sono nuovo di BoltDB e Golang e sto cercando di ottenere il tuo aiuto.Il modo migliore per memorizzare i dati in BoltDB

Quindi, ho capito che posso solo salvare l'array di byte ([] byte) per la chiave e il valore di BoltDB. Se ho una struttura utente come sotto, e la chiave sarà il nome utente, quale sarebbe la scelta migliore per memorizzare i dati in BoltDB dove si aspetta una matrice di byte?

Serializzare o JSON? O meglio?

type User struct { 
    name string 
    age int 
    location string 
    password string 
    address string 
} 

Grazie così tanto, avere una buona serata

+1

[Buona esempio BoltDB utilizzando JSON o goccia codifica] (https://bl.ocks.org/joyrexus/22c3ef0984ed957f54b9) – Mark

risposta

12

Sì, consiglio marshalling il User struct a JSON e quindi utilizzare un unico tasto []byte fetta. Non dimenticare che il marshalling di JSON include solo i campi struct esportati, quindi dovrai modificare la struct come mostrato di seguito.

Per un altro esempio, vedere BoltDB GitHub page.

type User struct { 
    Name string 
    Age int 
    Location string 
    Password string 
    Address string 
} 

func (user *User) save(db *bolt.DB) error { 
    // Store the user model in the user bucket using the username as the key. 
    err := db.Update(func(tx *bolt.Tx) error { 
     b, err := tx.CreateBucketIfNotExists(usersBucket) 
     if err != nil { 
      return err 
     }  

     encoded, err := json.Marshal(user) 
     if err != nil { 
      return err 
     } 
     return b.Put([]byte(user.Name), encoded) 
    }) 
    return err 
} 
+0

Grazie per il vostro aiuto! Molto utile! – Gon

+6

Si consiglia inoltre di esaminare altri formati di serializzazione come i Protocol Buffer che possono essere significativamente più veloci per il marshall/unmarshal e fornire funzionalità come il controllo delle versioni. –