我需要您对设计的反馈和建议。
我有(无法更改):
使用案例
让我解释一下这个问题:
JSON文件基本上包含以下信息:
{
"modules": {
"module1": {
"sub-module1": {
"info": "some faq statememt"
},
"sub-module2": {
"info": "some faq statememt"
}
},
"module2": {
"sub-module1": {
"info": "info on module2: submodule1"
}
}
}
}
现在所有用户都可以通过JSP请求任何模块,然后是子模块来读取信息。 该程序基本上获取所请求的信息,加载JSON文件,将其映射到模型对象,并通过AJAX将相关信息返回给JSP。
管理员用户可以通过添加新密钥/信息来编辑现有信息 或者通过编辑现有信息。
约束:多个管理员不会进行相同的密钥编辑。
我已经编写了应用程序,但现在并发了。 此时,通过FileInputStream和FileOutputStream访问该文件。
我有以下问题,我需要他们的答案,因为我对IO知之甚少:
答案 0 :(得分:1)
根据您在评论中的回答判断,您可以将每个键的监视器对象保存在内存中,然后同步键上的写入代码。 监视器。这将避免并发访问,同时保持一定程度的性能。但是,这应该通过使用nosql数据库或其他工具而不是直接读/写文件来避免。
编辑:事实证明你只有大约80个键。您可以将少量数据保留在内存中,并使用java同步处理并发访问。只需添加一个后台作业,然后立即将数据写入磁盘。
答案 1 :(得分:0)
对于问题-2;
在Java中,servlet本质上是单例对象,如果你担心线程安全,你绝对应该使用包装类并为每个请求创建实例以防止 Race Condition
对于未在分布式环境中托管的servlet(默认), servlet容器每个servlet只能使用一个实例 宣言。但是,对于实现SingleThreadModel的servlet 接口,servlet容器可以实例化多个实例 处理繁重的请求加载并将请求序列化到特定的 实例