首页 > 解决方案 > 来自 2 个进程的 RocksDB:IO 错误:同时锁定文件:sample.db/LOCK:资源暂时不可用

问题描述

我正在使用 RocksDB,我喜欢它的性能。我在我的高请求/第二台服务器中使用它来进行 GET 操作。

问题是我需要不时更新我的​​ RocksDB。

所以,我有 Process_A 保持rocksdb打开并继续对其执行get操作。

现在,我希望 Process_B 每隔 X 时间(比如说 30 分钟)在 crontab 中运行一次,并在 RocksDB 中添加几个条目。

问题是该文件正在使用中,我自然会收到 LOCK 错误。我在 debian buster 上运行它。但令我困惑的是,它是随机工作的。

有人试过这个场景吗?或者也许知道这样做的更好方法?

另一种方法是停止 Process_A,使用 Process_B 执行更新,然后重新启动 Process_A,但这会导致我丢失请求......

谢谢你。

标签: debianrocksdb

解决方案


对于遇到这种情况的人来说,刚刚发现。完全有可能,您只需从 Process_A 以只读模式打开 RocksDB。

不知道原生rocksdb库的方法是什么,我在C#中使用RocsDB-Sharp,它有一个名为RocksDB.OpenReadonly()的方法(而不仅仅是Open())。

接下来,我将测试当我在另一个进程中打开时插入数据时更改是否实际适用,或者我是否必须从 Process_A 关闭数据库并在每次插入内容时重新打开它。

我会及时向大家发布。


推荐阅读