【发布时间】:2020-12-09 15:09:59
【问题描述】:
有没有办法使用 arangodb 实现线程安全的并发队列存储? 我从 RocksDB 读到这篇文章,使用 KV 存储,可以“轻松”实现可扩展的持久队列服务,这是否也适用于 ArangoDB?我在某处读到 Arango 使用 RocksDB 作为其 KV 存储的存储引擎,所以我想知道是否有人已经尝试过。
谢谢!
【问题讨论】:
标签: arangodb
有没有办法使用 arangodb 实现线程安全的并发队列存储? 我从 RocksDB 读到这篇文章,使用 KV 存储,可以“轻松”实现可扩展的持久队列服务,这是否也适用于 ArangoDB?我在某处读到 Arango 使用 RocksDB 作为其 KV 存储的存储引擎,所以我想知道是否有人已经尝试过。
谢谢!
【问题讨论】:
标签: arangodb
我已经尝试过了,但无论出于何种原因(可能是愚蠢的实现),我都遇到了资源争用问题(死锁),即使使用率很低。
ArangoDB 确实使用 RocksDB 作为默认存储引擎(不推荐使用 MMFiles),但除了一些用于调整性能调整的旋钮之外,没有公开 RocksDB 内部结构。如果您想要非常类似于基于 RocksDB 的解决方案,ArangoDB 可能不是您想要的,但 ArangoDB 确实提供了一种 K/V 解决方案。
由于 ArangoDB 仅支持两种“集合”类型(“文档”和“边缘”),因此 K/V 存储实际上是一种实现方法,而不是您选择的选项。 Their idea 是使用带有单个“值”属性的本机“_key”属性(存在于每个文档中,唯一的,自动索引),创建如下文档:
{
"_key": "my awesome key name",
"value": "supercool"
}
我的部分用例是创建一个“nonce”令牌队列,我会在收到请求时提取这些令牌,以充当一种廉价的资源管理器。但是,当我尝试以低于 1 秒的查询速率进行查询时,队列很快变得不堪重负,当它尝试访问/锁定正在写入的令牌时,我陷入了死锁。
再一次,我相信这本来可以解决的,但是该项目朝着不同的方向发展,我最终没有完成故障排除。
【讨论】:
使用Transactions,更多细节请查看ArangoDB如何实现Foxx queues、foxx/queues code @ github
【讨论】: