在Web应用程序的上下文中,是否适合以Java方式对从数据库中检索到的数据(从第一个查询中获取)进行一些JOIN操作,并使用该“ JOIN”数据对数据库进行第二次也是最后一次查询以获取所需的数据。
Java是否为此类实现提供任何内置的机制,或者做这的最佳方法是什么?
(我知道这不是最好的做法,但是该数据库不是SQL数据库,并且不允许进行JOIN操作。)
JOIN操作的数据为:-一个数据集包含约50个整数(avg),另一个数据集包含约150个整数(avg)。
第一个数据集将仅包含整数列表,而第二个数据集将具有整数集列表和“数据整数”。如果两个数据集中的两个整数相交,则在结果列表中传递相应的“数据整数”。因此,结果将包含与相交的整数对应的数据整数。
例如
清单A = {21,65,93}
列表B = {(21,42342),(53,73242),(93,32312)}
结果= {42342,32312}
可以以树结构的形式实现用于JOIN操作的两组数据。因此,由于只需要比较树而不是整个列表,因此可以使此JOIN操作更有效。
(执行JOIN时,如果两个(相似深度)节点在树中的某个节点不匹配,则将跳过其所有子节点,并且控件将移至下一个顶部节点。)
谢谢。
最佳答案
当然,您可以使用Java快速进行JOIN。我只知道反对这样做的三个原因:
这是额外的工作
不匹配的行会被不必要地获取
数据量可能太大,无法在内存中处理
无论如何,没有SQL DB,您别无选择。因此,假设最简单的情况(即在A.x = B.x
之类的条件下加入),您可以通过使用Set.retainAll
计算交点来轻松实现。对于相交的每个成员,您需要将第一个表中的所有对应行与第二个表中的所有对应行进行组合。
假设表中没有更多有趣的列,那么您就完成了。否则,您需要以某种方式附加它们。如果x
在A
和B
中都是唯一的,则可以使用“地图”,否则需要使用“多集”(有很多实现方式,例如在Guava中)。