我有2个Java实体 - 学生和课程。 他们之间的关系是ManyToMany - 每个学生都有很多课程,每个课程都可以由很多学生参加。
因为有很多重复的课程,我们决定制作一套课程表,每次学生想要学习一套课程时,他都需要查看是否已经设置了这样的课程,如果有的话,他将使用它的id,如果没有,他将创建这个集合。如果学生已完成此设置,我们会在setId字段中设置null
。
问题是课程表是动态的 - 我们可以随时添加和删除课程(除非有学生使用此课程),并且课程数量没有限制 - 甚至可以是150
我们需要搜索一组的存在,尽可能快。
我们考虑过:
HashCode但是这个HashCode需要是动态的,甚至应该支持2 ^ 100种可能性。
将课程的ID作为字符串连接起来并搜索该字符串以查看该集合是否存在。
为每个课程分配一个素数,该组的id将是素数的乘法 - 问题是最大的数字(所有课程的集合)可能太大,而且分解这个数字可能需要很长时间。
对于这些要求,最佳实施方案是什么?欢迎任何想法!
(我们不想使用传统的ManyToMany表的原因是性能问题。有一个很大的计算导致这种情况。)
谢谢!
答案 0 :(得分:1)
预测......
100个课程将导致几十个非常受欢迎的"套装#34;以及成千上万的罕见套装。
你会发现"套数"太过笨拙而不实用。
答案 1 :(得分:0)
我在项目中遇到同样的问题,我在其中显示了包含默认列和订单的文档列表,并且来自一个表,如果用户更改了订单或在其列表中创建了任何字段,那么另一个条目将生成该表和行为当前用户设置了id 在我的情况下,需要你可以忽略它,并为用户选择的课程列表存储JSON,如果列表已经存在于表中,那么在这种情况下你可以为该用户分配set id。
SortedSet<Integer>
JSON总是一样的。SortedSet setA = new TreeSet();