最近,我在几个项目中看到了很多使用流过滤对象的代码,比如:
library.stream()
.map(book -> book.getAuthor())
.filter(author -> author.getAge() >= 50)
.map(Author::getSurname)
.map(String::toUpperCase)
.distinct()
.limit(15)
.collect(toList()));
使用它而不是直接对数据库进行HQL/SQL查询返回已经过滤的结果有什么好处吗?
第二种方法不是要快得多吗?
发布于 2017-04-09 15:22:47
如果数据最初来自数据库,那么最好在数据库中进行过滤,而不是获取所有内容并在本地进行过滤。
首先,数据库管理系统擅长过滤,这是他们主要工作的一部分,因此他们对此进行了优化。还可以通过使用索引来加快过滤速度。
其次,获取和传输许多记录,并将数据解组到对象中,只是为了在进行本地过滤时丢弃其中的许多记录,这是对带宽和计算资源的浪费。
发布于 2017-04-09 22:53:46
Hibernate和其他ORM通常对编写实体比读取更有用,因为它们允许开发人员将特定写入的顺序卸载到框架,而几乎永远不会“出错”。
现在,对于阅读和报告,另一方面(考虑到我们在这里讨论的是DB ) SQL查询可能更好,因为中间不会有任何框架,并且您将能够根据将调用此查询的数据库而不是您选择的框架来调整查询性能,这在某种程度上为如何进行调整提供了更大的灵活性。
https://stackoverflow.com/questions/43304023
复制相似问题