debian - 来自 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,但这会导致我丢失请求......
谢谢你。
解决方案
对于遇到这种情况的人来说,刚刚发现。完全有可能,您只需从 Process_A 以只读模式打开 RocksDB。
不知道原生rocksdb库的方法是什么,我在C#中使用RocsDB-Sharp,它有一个名为RocksDB.OpenReadonly()的方法(而不仅仅是Open())。
接下来,我将测试当我在另一个进程中打开时插入数据时更改是否实际适用,或者我是否必须从 Process_A 关闭数据库并在每次插入内容时重新打开它。
我会及时向大家发布。
推荐阅读
- android - 如何将多个音频文件上传到 Google Drive 到 Drive 中的指定文件夹?
- dart - 通用方法的泛型
- arrays - 在 Swift 4 中使用 {"Name": String, "Value": String} 结构解析数组
- angular - Aysnc 验证器角度 6
- r - 按 lubridate %within% 间隔对组值求和
- r - 如何编写一个在两列中查找条件然后在数据帧的第三个中添加值的循环?
- c++ - 在 next_find 中使用 greater_equal 查找排序序列中的等价元素
- r - 移除不完整的 Anaconda 环境,减少 Anaconda 使用的空间
- sql - 在 SQL 中减去毫秒时出现意外结果
- r - 如何制作矩阵行类型