使用Arangodb实现队列

iklwldmw  于 2022-12-09  发布在  Go
关注(0)|答案(2)|浏览(108)

有没有一种方法可以使用arangodb实现线程安全的并发队列存储?我在RocksDB上读到这篇文章,使用KV存储,可以“轻松地”实现可伸缩的持久队列服务,这也适用于ArangoDB吗?我在某个地方读到Arango使用RocksDB作为其KV存储的存储引擎,所以我想知道是否有人已经尝试过这种方法。
谢谢你!

rsaldnfx

rsaldnfx1#

我已经尝试过了,但是不管出于什么原因(可能是愚蠢的实现),我遇到了资源争用问题(死锁),即使是在低使用率的情况下。
ArangoDB确实使用RocksDB作为默认的存储引擎(MMFiles被弃用),但是除了一些用于性能调整的旋钮之外,ArangoDB并没有公开RocksDB的内部结构。如果您想要与基于RocksDB的解决方案 * 非常 * 相似的解决方案,ArangoDB可能不是您正在寻找的解决方案,但是ArangoDB确实提供了一种K/V解决方案。
由于ArangoDB只支持两种“集合”类型(“文档”和“边缘”),因此K/V-store实际上是一种实现方法,而不是一种选择。他们的想法是使用原生的“_key”属性(存在于每个文档中,唯一,自动索引)和一个“value”属性,创建一个如下所示的文档:

{
   "_key": "my awesome key name",
   "value": "supercool"
}

我的部分用例是创建一个“nonce”令牌队列,当请求进入时,我将拾取这些令牌,作为一种廉价的资源管理器。然而,当我试图以低于1秒的查询速率运行时,队列很快就被淹没了,当它试图访问/锁定正在写入的令牌时,给我带来了死锁。
再次,我相信这本可以整理出来,但该项目去了一个不同的方向,我从来没有结束故障排除它完成。

hrirmatl

hrirmatl2#

使用Transactions,有关详细信息,请查看ArangoDB如何实现Foxx queuesfoxx/queues code @ github

相关问题