有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java会话之外的任何其他选项都可以在spring MVC应用程序中保存数据

我正在开发在线考试软件,成千上万的学生可以同时从他们的学院/学校进行在线考试。因此,考虑到并发点击率和服务器性能,我正在寻找存储一些考试相关数据的不同且最佳的方法:

在申请中,每个学生都会随机得到问题。我正在考虑在session中存储学生智能问题,但我担心在session中存储这么大的(问题及其选项)数据

考虑一个场景,让每个学生都有30个单词,在一个时隙里有10k个学生在那里。那么session对象会变得太大,不是吗

此外,还有一些与考试相关的设置/配置,我想随时准备(我不想每次都从数据库中获取配置)


共 (1) 个答案

  1. # 1 楼答案

    Consider an scenario let each student will have 30 ques and in a single slot 10k students...

    我想有些学生也会问同样的问题。如果你真的有30万个不同的问题,你现在可以停止阅读了

    In application each student will get questions randomly. I am thinking to store student wise questions in session

    我想你不需要储存任何东西。生成一个随机的masterSeed,取一个studentId,然后计算seed = secureHash(masterSeed, studentId)。用这个seed来选择问题。如果需要,重新计算

    关于存储问题,像往常一样使用数据库和缓存,忘记会话

    要求提供有关问题选择的详细信息

    对于“你能不能提供更多关于使用种子和缓存选择问题的信息”的回答是“实际上不能”。为什么

    • 无论OP使用什么随机算法来选择问题,都会对我的上述提议起到同样的作用。只需创建new Random(seed)(种子来自上面)并运行相同的算法1

    • web和数据库服务器能够实现的所有缓存魔法也适用于此。我的观点是,将问题存储在会话中没有任何好处。恰恰相反:

      • 存储在会话中的数据是“脏”的,如果内存不足,服务器必须对其进行序列化
      • 每当两个学生的同一个问题被反序列化时,就会有两个不同的数据段占用的内存是以前的两倍

    因此,您有更多的IO(缓存的数据可以简单地丢弃),更多的内存消耗,并且您不能使用数据库服务器的内存,以防它在不同的机器上运行


    1如果算法不是真正随机的并且试图为坐在一起的学生选择不同的问题,这可能会变得复杂,但这是一个不同的问题