【问题标题】:Using Arangodb to implement a queue使用 Arangodb 实现队列
【发布时间】:2020-12-09 15:09:59
【问题描述】:

有没有办法使用 arangodb 实现线程安全的并发队列存储? 我从 RocksDB 读到这篇文章,使用 KV 存储,可以“轻松”实现可扩展的持久队列服务,这是否也适用于 ArangoDB?我在某处读到 Arango 使用 RocksDB 作为其 KV 存储的存储引擎,所以我想知道是否有人已经尝试过。

谢谢!

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    我已经尝试过了,但无论出于何种原因(可能是愚蠢的实现),我都遇到了资源争用问题(死锁),即使使用率很低。

    ArangoDB 确实使用 RocksDB 作为默认存储引擎(不推荐使用 MMFiles),但除了一些用于调整性​​能调整的旋钮之外,没有公开 RocksDB 内部结构。如果您想要非常类似于基于 RocksDB 的解决方案,ArangoDB 可能不是您想要的,但 ArangoDB 确实提供了一种 K/V 解决方案。

    由于 ArangoDB 仅支持两种“集合”类型(“文档”和“边缘”),因此 K/V 存储实际上是一种实现方法,而不是您选择的选项。 Their idea 是使用带有单个“值”属性的本机“_key”属性(存在于每个文档中,唯一的,自动索引),创建如下文档:

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

    我的部分用例是创建一个“nonce”令牌队列,我会在收到请求时提取这些令牌,以充当一种廉价的资源管理器。但是,当我尝试以低于 1 秒的查询速率进行查询时,队列很快变得不堪重负,当它尝试访问/锁定正在写入的令牌时,我陷入了死锁。

    再一次,我相信这本来可以解决的,但是该项目朝着不同的方向发展,我最终没有完成故障排除。

    【讨论】:

      【解决方案2】:

      使用Transactions,更多细节请查看ArangoDB如何实现Foxx queuesfoxx/queues code @ github

      【讨论】:

        猜你喜欢
        • 2019-06-21
        • 2015-10-03
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-03
        • 2018-07-12
        相关资源
        最近更新 更多