2016-03-31 2 views
10

Я новичок в BoltDB и Golang и пытаюсь получить вашу помощь.Лучший способ хранения данных в BoltDB

Итак, я понимаю, что могу сохранить массив байтов ([] byte) для ключа и значения BoltDB. Если у меня есть структура пользователя, как показано ниже, и ключ будет именем пользователя, какой будет лучший выбор для хранения данных в BoltDB, где он ожидает массив байтов?

Сериализация или JSON? Или лучше?

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

Большое спасибо, есть хороший вечер

+1

[Хороший BoltDB пример использования JSON или кодирование завала] (https://bl.ocks.org/joyrexus/22c3ef0984ed957f54b9) – Mark

ответ

12

Да, я бы рекомендовал маршалинге в User-структуру в формате JSON, а затем использовать уникальный ключ []byte срез. Не забывайте, что маршалинг JSON включает только экспортированные поля структуры, поэтому вам нужно будет изменить структуру, как показано ниже.

Дополнительный пример см. На странице 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

Спасибо за вашу помощь! Очень полезно! – Gon

+6

Вы также можете посмотреть в других форматах сериализации, таких как протокольные буферы, которые могут быть значительно быстрее для маршала/отмены работы и предоставления таких функций, как управление версиями. –

Смежные вопросы