【问题标题】:RocksDB from 2 processes: IO error: While lock file: sample.db/LOCK: Resource temporarily unavailable来自 2 个进程的 RocksDB:IO 错误:同时锁定文件:sample.db/LOCK:资源暂时不可用
【发布时间】:2020-10-29 16:04:32
【问题描述】:

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

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

所以,我有 Process_A 可以让 RocksDB 保持打开状态并继续对其执行 get 操作。

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

问题是文件正在使用中,我自然会得到 LOCK 错误。 我在 debian buster 上运行它。 但让我感到困惑的是,它有点随机。

有人试过这种情况吗?或者也许知道更好的方法?

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

谢谢。

【问题讨论】:

    标签: debian rocksdb


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      我会及时通知你的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        • 2012-03-07
        相关资源
        最近更新 更多