问题标签 [boltdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
loops - 地图中键的值在golang中自动更改
所以我有这个通过调用方法来初始化的varresolve
类型。map[string][]byte
如果我只是迭代resolve
该值正在正确打印。
但是在下一行中,我试图迭代地图以将值存储在 db ( bolt
) 中,因为地图中键 ( key1
) 的值正在自动更改,我无法弄清楚原因。为了进一步简化我所做的是将该键的值存储在一个新的变量中
然后在将值存储在数据库中时,我检查了密钥是否为key1
store a
。在这种情况下a
,不应该更改的值也正在更改。
这个要点有代码,我们可以看到resolve
第 30 行的代码在第 34 行发生了变化。
我在 go playground 中添加了代码,这里是链接 https://play.golang.org/p/2WacK-xxRp_m
amazon-s3 - Loki 配置与 s3
我无法让 Loki 使用docker-compose
. 日志在 Grafana 中可见,但 S3 存储桶仍为空。
s3 存储桶是公共的,我附加了一个 IAM 角色来允许s3:FullAccess
。
我将 loki 更新为 v2.0.0 并将周期更改为 24 小时,但没有任何区别。loki 日志中没有错误。
以下是 docker logs (loki) 中的选定行:
这是我的loki.config
:
这是docker-compose.yaml
digital-ocean - 在 DigitalOcean 块存储上使用嵌入式数据库(RocksDB、BoltDB、BadgerDB)是否安全?
DigitalOcean 块存储使用 ceph,这意味着附加到液滴的卷将物理上位于不同的机器上。因此,写入此卷的数据库文件将使用网络,而不是本地磁盘。
BoltDB 特别提到通过网络文件系统使用是不安全的,但我不确定这是否也适用于 DO 块存储(它不是 NFS,但它确实使用网络)。
将 DO 块存储用于嵌入式数据库是否安全?是的,性能不会那么好,但如果它完全不安全,那就无关紧要了。
如果答案是“不,嵌入式数据库应该只使用本地磁盘”,那么复制数据库的简单方法是什么(例如每天一次或几个小时)?
go - boltdb 更新在提交时冻结
我想从 API 中提取数据并将其保存到 boltDB 数据库。问题是该进程在 commit() 调用上被冻结并且没有发送恐慌或错误......
有人看到下面的代码吗?我一次最多放 1500 支蜡烛,可能太多了?如果是这样,那么这个数额的最佳做法是什么?
非常感谢 !
这是 SIGQUIT 信息:这似乎是 rwmutex.go 中的 Lock() 函数正在等待它的可用性......
go - Golang BoltDB 删除密钥似乎不起作用
CentOS 7,Github boltdb/bolt 版本 1.3.1,go 版本 go1.17.7 linux/amd64
这个问题可能会导致对 BoltDB 工作方式的误解,或者我有一个错误,或者可能有问题。我以前用过BoltDB,效果很好。不过,我并没有明确地寻找这个问题。我看到的是我尝试从存储桶中删除一个键,并且该键及其值在活动 db.Update 中被删除,但在 db.Update 结束后它仍然存在。寻找任何可能发生的事情的解释。似乎这个功能不可能被破坏。
我正在使用 BoltDB 存储桶来存储与用于创建新帐户的电子邮件地址关联的临时令牌。想要立即整理并清理旧数据(过期的令牌、滥用的令牌等)。很标准的东西。临时token的结构为(key为临时token,10位随机字符串):
(临时Token是Bucket key)
用户在 Web 表单中输入电子邮件地址并点击“提交”。这会创建对 REST 服务的调用,该服务会在临时令牌表中创建一个条目,例如:
"BpLnfgDsc2" => foo@bar.com, 1645650084
该服务通过电子邮件发送一个嵌入了临时令牌的 URL,该链接将用户带到一个表单,允许他们输入他们的电子邮件地址(再次验证)和新密码(两次)。点击提交然后会导致从 Web 处理程序中调用以下代码:
我正在使用超时令牌(4)进行测试,因此想法是当它遇到该超时令牌时,它想从存储桶中删除这个现在无效的令牌。
在 A 位置,它打印: First Get call token BpLnfgDsc2 is {"emailaddress":"foo@bar.com","tokenexpirytime":1645650084}
在 B 位置,我将执行 .Get 的代码放入其中,它会打印出来(看起来要被删除): DB Close (4) 之前,删除之后,令牌 BpLnfgDsc2 是
在 C 位置,它打印(看起来又回来了): DB Close 后,令牌 BpLnfgDsc2 是 {"emailaddress":"foo@bar.com","tokenexpirytime":1645650084}
没有任何错误返回。我已经重复了很多次,把 fmt.Printfs 放在任何地方,看看发生了什么。结果是一样的,密钥似乎没有被删除。在此之后,我'vi -b' DB 文件,键值仍然存在。在它坐下之后运行,它仍然可以看到那里的关键值。我很困惑,任何指针将不胜感激。
更新:Put/Get/Delete/Get 的基本螺栓功能按照此测试代码工作(应该很明显):
打印出来:
Token 的值:"foo" 是 "{"emailaddress":"foo@bar.com","tokenexpirytime":1234567890}" 刚刚把它放在那里
Token 的值:删除后的“foo”为“”
所以,不知道为什么其他代码不起作用。几乎就好像删除使用了不同的键,但键在其他代码中是相同的。