RocksDB from 2 processes: IO error: While lock file: sample.db/LOCK: Resource temporarily unavailable

RocksDB from 2 processes: IO error: While lock file: sample.db/LOCK: Resource temporarily unavailable

我正在使用 RocksDB,我喜欢它的性能。我在我的高 requests/second 服务器中使用它进行 GET 操作。

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

所以,我 Process_A 让 rocksdb 保持打开状态并继续对其执行获取操作。

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

问题是文件正在使用中,自然而然地出现了 LOCK 错误。 我在 debian buster 上 运行ning 这个。 令我困惑的是,它是随机工作的。

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

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

谢谢。

遇到这种情况的人,才知道。这完全有可能,你只需要从 Process_A 以只读模式打开 RocksDB。

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

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

我会及时通知你。

如果两个进程都有写权限,则不能用两个进程打开同一个数据库。

如果您有一个用于写入的进程,另一个用于读取的进程,则数据在刷新之前不会同步。对于并发 read/write,通常用户会在一个进程中创建多个线程。