- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
boltdb 的 key 应该使用哪个字节序?我应该先获取机器的字节序并使用它吗?
我需要正确排序键 - 就像一个字节序列,没有特定的排序逻辑。例如,这里应该使用哪个字节序(Key
是一个顺序 id
,就像 mongodb
的一样):
package main
import (
"bytes"
"encoding/binary"
"fmt"
"log"
"time"
"github.com/boltdb/bolt"
)
var (
Endian = binary.BigEndian // Which endian?
)
func main() {
db, err := bolt.Open("temp.db", 0600, nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
defer time.Sleep(time.Second)
tempBucket := []byte("TMP")
db.Update(func(tx *bolt.Tx) error {
data := Row{
Key: Key{
Head: 0x1A1A1A,
Mark: 0x1010,
Counter: 0x01,
},
At: time.Now().UTC().Unix(),
Payload: 10,
}
keyBytes, err := marshal(&data.Key)
if err != nil {
return erp(err)
}
dataBytes, err := marshal(&data)
if err != nil {
return erp(err)
}
b, err := tx.CreateBucketIfNotExists(tempBucket)
if err != nil {
return erp(err)
}
err = b.Put(keyBytes, dataBytes)
if err != nil {
return erp(err)
}
return nil
})
db.View(func(tx *bolt.Tx) error {
b := tx.Bucket(tempBucket)
c := b.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
k, v := k, v
fmt.Println(k, v)
dt := Row{}
err := unmarshal(&dt, v)
if err != nil {
return erp(err)
}
fmt.Printf("key=%X, value=%v\n", k, dt)
}
return nil
})
}
func erp(e error) error {
log.Println(e)
return e
}
func marshal(pointerToData interface{}) ([]byte, error) {
buf := new(bytes.Buffer)
err := binary.Write(buf, Endian, pointerToData)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
func unmarshal(pointerToData interface{}, bs []byte) error {
buffer := bytes.NewBuffer(bs)
err := binary.Read(buffer, Endian, pointerToData)
if err != nil {
return err
}
return nil
}
type Row struct {
Key
At int64
Payload int64
}
type Key struct {
Head uint32
Mark uint16
Counter uint16
}
最佳答案
要使键自然排序,请使用 BigEndian
在 LittleEndian 中,字节被交换,这会使它乱序。
关于go - BoltDB 中的键顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35179563/
我正在考虑使用 BoltDB 作为后端主数据库,我的 Go 代码几乎没有问题;还需要您对使用 BoltDB 作为主要后端数据库的意见。 我使用 Go 的 net/http,并使用 boltDb 作为全
关闭。这个问题需要details or clarity .它目前不接受答案。 想要改进这个问题吗? 通过 editing this post 添加详细信息并澄清问题. 关闭 7 年前。 Improve
目前正在使用 db.Update() 更新 boltdb 中的键值。 err := db.Update(func(tx *bolt.Tx) error { b, err := tx.Creat
boltdb 的 key 应该使用哪个字节序?我应该先获取机器的字节序并使用它吗? 我需要正确排序键 - 就像一个字节序列,没有特定的排序逻辑。例如,这里应该使用哪个字节序(Key 是一个顺序 id,
这就是我必须创建嵌套存储桶的内容。它不会返回任何错误,但无法在另一个嵌套存储桶下创建嵌套存储桶。 func CreateNestedBuckets(buckets []string) error {
我有一个带有 ID 和 LoginName 字段的 User 结构,我希望这些字段中的任何一个都可以通过单次调用访问该结构到数据库。我知道 BoltDB 不应该处理任意字段索引等(与 SQL 不同),
我有一个使用 golang 编写的应用,我想创建一个 builin 数据库,我选择了 boltdb。 我有一些初始化数据想要手动植入数据库。我有 database.db 文件,我想将一些数据放入其中。
我是 BoltDB 和 Golang 的新手,正在寻求您的帮助。 所以,我知道我只能为 BoltDB 的键和值保存字节数组 ([]byte)。如果我有一个如下的用户结构,并且键将是用户名,那么将数据存
我正努力全神贯注于 Bleve,我理解教程、视频和文档中发生的一切。然而,当我在 BoltDB 上使用它时,我感到非常困惑,不知道如何开始。 假设我有一个名为 data.db 的现有 BoltDB 数
我是 Go 新手,我正在尝试使用 Cayley 和 BoltDB 作为后端数据存储来设置一个简单的图形数据库。现在我正在尝试从命令行运行 cayley。运行此命令: cayley http --db=
我有一个 Go 网络应用程序,它将一些数据存储在内置的 BoltDB 中。 有什么方法可以使用 Python 读取它的内容吗? 最佳答案 在您的 Go 应用程序中创建一个小型处理程序,以响应数据库转储
Bolt 在数据文件上获得文件锁,因此多个进程不能同时打开同一个数据库。打开一个已经打开的 Bolt 数据库会导致它挂起,直到其他进程关闭它。 既然如此,有没有像各种客户端同时连接和访问数据库这样的连
我在 ectd #2646 上遇到了这个问题,这是相当旧的帖子,但我在文档上找不到任何内容。 etcd 是否有自己的存储引擎,或者它正在使用 boltdb 或其他一些后端? 谢谢 最佳答案 看起来是这
Bolt 是一个令人惊叹的 Go 嵌入式键/值数据库: https://www.progville.com/go/bolt-embedded-db-golang/ https://github.com
DigitalOcean block storage uses ceph这意味着附加到 Droplet 的体积将在物理上位于不同的机器上。因此写入此卷的数据库文件将使用网络,而不是本地磁盘。 Bolt
在我的代码中,我使用了很多重复代码来迭代bolddb 数据库中的嵌套桶。我想做一些重构,将这些重复的代码包装成新的函数。 我知道我需要为此使用闭包,但是额外的 db.View 层让我很头疼。 更准确地
我是一名优秀的程序员,十分优秀!