gpt4 book ai didi

r - fwrite 是否锁定文件以供同时读取

转载 作者:行者123 更新时间:2023-12-01 03:17:50 27 4
gpt4 key购买 nike

我想使用 data.table::fwrite 以文本日志的形式快速存储和检索状态。这些是通过移动应用程序更新的,该应用程序使用管道工 API 调用到 R 端点。移动应用程序每秒可能会触发许多 API,并且同一行有可能在大约 0.5 秒的间隔内被两个 API 修改。由于每次 API 调用延迟 1~2 秒,我避免了数据库读写(R 的 fwrite 可以在第一次 0.5 秒内完成相同的工作,然后在随后的调用中在不到 20 毫秒的时间内完成 API)

我的问题是:

will fwrite/ fread combination work for higher traffic scenario or do I have to look for ways of locking the file to avoid a corruption? Are there any ways of locking a file for read or write?

最佳答案

will fwrite/ fread combination work for higher traffic scenario or do I have to look for ways of locking the file to avoid a corruption?



答案是“视情况而定”。

如果您使用简单的托管模型托管应用程序,其中所有流量都到达相同的单例 R 进程,那么即使在高流量场景中,您也可能会没事。这里的警告是,如果您在 API 中进行任何类型的内部进程 fork (或者如果 data.table 这样做;我不确定,我从未使用过它),这将不会成立。

但是,如果您托管具有多个 R 进程和负载均衡器的应用程序,那么您将遇到多个进程试图写入同一个文件的麻烦。

扩展 Plumber API 的典型建议是通过添加更多 R 进程来水平扩展。因此,我鼓励您尝试找到一种设计,如果/当您最终希望多个 Plumber 进程并行运行时,该设计将继续工作。您可以考虑集中在远程数据库中,甚至使用 SQLite 在本地执行此操作,只需确保将其配置为支持多个并发编写器(我不能 100% 确定 SQLite 是否支持此功能)。

我当然不会期望 1-2 秒的延迟会击中 DB。可能值得调查您的数据库硬件/软件或检查网络中是否存在任何延迟。您也可以查看 pool package作为保持数据库连接打开并可用于您的 API 的一种方式。我猜这会大大减少您的数据库写入所需的时间。

关于r - fwrite 是否锁定文件以供同时读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47796572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com