gpt4 book ai didi

java - 我应该为我的简单流程使用内存映射文件吗?

转载 作者:行者123 更新时间:2023-12-02 06:45:28 25 4
gpt4 key购买 nike

我有兴趣实现以下简单流程:
客户端向服务器进程发送服务器存储的简单消息。由于该消息没有任何层次结构(IMO),因此最好的方法是将其保存在文件中而不是 rdb 中。
但我想弄清楚如何优化它,因为我认为有两种选择:

  1. 服务器向客户端发送 200 OK,然后存储该消息,以便客户没有注意到任何延迟
  2. 服务器保存消息,然后发送 200OK,然后发送客户端注意到文件 I/O 的开销。

我更喜欢 (1) 的性能,但这可能会导致客户端认为一切正常,但实际上从未保存消息(对于各种错误情况)。
所以我在想是否可以使用 nio 和内存映射文件。
但我想知道这是否适合使用内存映射文件?使用内存映射文件会保证例如如果进程崩溃,消息会被保存吗?
在我看来,流程将创建/打开和关闭许多文件,所以这是内存映射文件的良好候选者吗?

最佳答案

Server saves the message and then sends the 200OK but then the client notices the overhead of the file I/O.

我建议你测试一下。我怀疑人类不会注意到 10 毫秒的延迟,我希望对于较小的消息,您应该会比这更好。

So I was thinking if I could use nio and memory mapped files.

我使用内存映射,因为它可以将每次写入的开销减少最多 5 微秒。这对你来说重要吗?如果没有,我会坚持使用最简单的方法。

Would using a memory mapped file guarantee that e.g. if the process crashed the msg would be saved?

只要操作系统不崩溃,就可以。

In my mind the flow would be creating/opening and closing many files so is this a good candidate for memory-mapping files?

打开和关闭文件可能比写入数据更昂贵。 (按数量级)我建议将此类操作保持在最低限度。

您可能会发现我的这个库很有趣。 https://github.com/peter-lawrey/Java-Chronicle它允许您以个位数微秒的顺序保存文本消息,以亚微秒的顺序保存小型二进制消息。

关于java - 我应该为我的简单流程使用内存映射文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18684494/

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