我有兴趣实施以下简单流程:
客户端向服务器进程发送服务器存储的简单消息。由于消息没有任何层次结构IMO,最好的方法是将其保存在文件而不是rdb中
但是我想弄清楚如何优化它,因为我认为它有两种选择:
我更喜欢(1)的性能但这可能导致客户认为实际上从未保存过的msg(对于各种错误情况)一切正常。 所以我在想是否可以使用nio和内存映射文件 但我想知道这是使用mem映射文件的一个很好的候选人吗?使用内存映射文件可以保证例如如果进程崩溃,msg会被保存吗? 在我看来,流程将创建/打开和关闭许多文件,所以这是内存映射文件的一个很好的候选者吗?
答案 0 :(得分:2)
服务器保存邮件,然后发送200OK,但客户端会注意到文件I / O的开销。
我建议你测试一下。我怀疑一个人会注意到一个10毫秒的延迟,我希望你对于小信息你应该比这更好。
所以我在想是否可以使用nio和内存映射文件。
我使用内存映射,因为它可以将每次写入的开销减少多达5微秒。这对你很重要吗?如果没有,我会坚持使用最简单的方法。
使用内存映射文件可以保证例如如果进程崩溃,msg会被保存吗?
只要操作系统没有崩溃,是的。
在我看来,流程将是创建/打开和关闭许多文件,所以这是内存映射文件的一个很好的候选者吗?
打开和关闭文件可能比写入数据快得多。 (按一个数量级)我建议将这些操作保持在最低限度。
您可能会发现我的这个图书馆很有趣。 https://github.com/peter-lawrey/Java-Chronicle它允许您按照单位数微秒的顺序保存消息,对于小型二进制消息,可以使用亚微秒级。