【问题标题】:Sorting in java?在java中排序?
【发布时间】:2013-11-25 10:40:11
【问题描述】:

我有一个应用程序使用排序标准。但问题是,在我使用数据库排序(5000 个记录排序)之前。现在我有 20,000 条记录用于排序数据。有人对我说使用 Java 进行排序。它应该更适合您的应用程序。

我有两个问题:

  1. 使用 Java 和数据库排序哪个性能更好?
  2. 假设我使用 Java 独立于 db 对其进行排序。

Java 排序可以处理 20,000 条记录吗?

【问题讨论】:

  • 1.那要看。 2.是的,java可以处理20000条记录的排序:)。
  • 如果您将数据保存在数据库中,那么是的,数据库排序会更好
  • 除非您正在为非常有限的硬件进行开发,例如智能卡,20,000 对象的数量相当

标签: java database sorting record


【解决方案1】:

如果可以,请对数据库中的数据进行排序。在内存中肯定更快。排序取决于算法,而不是任何特定的技术。结果,java 可以对任意数量的记录进行排序。但是,您感兴趣的是如何最有效地对数据进行排序,在您的情况下是在数据库中。

如果您需要学习如何在内存中使用 java 对日期进行排序,您可以阅读以下内容:http://docs.oracle.com/javase/tutorial/collections/algorithms/index.html#sorting

【讨论】:

    【解决方案2】:

    根据需要从数据库中取出数据总是更好(考虑在排序字段上使用索引来提高性能)

    【讨论】:

      【解决方案3】:

      在处理数据库中的数据时适用以下一般规则:

      1. 可以用 SQL 完成吗?使用SQL 进行操作。
      2. 可以用 PLSQL 完成吗?使用PLSQL 进行操作。
      3. 使用您选择的编程语言进行操作,反正会很慢。

      为什么用 Java 做不好?

      为了能够在 Java 中进行排序之类的操作,显然首先必须将数据从数据库中获取到程序空间,然后再将其写回。这是一个明显的开销,经常被忽略,尤其是在处理大量数据时变得困难。想一想通过网络连接从数据库中提取 2 GB 的数据(最坏的情况)然后将结果发回需要多长时间。

      如果您采用 SQL/PLSQL 方式,则所有数据都保留在数据库中,永远不需要转发到您的程序。这不仅消除了传输的开销,而且还允许数据库以最优化的形式处理它——另一个经常被忽略的开销。如果您提取数据,数据库不知道您将如何处理它,因此它只需将所有内容交给您的代码。如果您在一个表上执行类似排序的操作,则 DB i.E.知道子表和链接无论如何都不会受到影响,因此甚至不需要读取该数据。再次获得显着的性能提升。
      想想什么可能更快:您在 5 分钟内编写的代码,或者数百人在 10 多年内编写的 DB 代码,甚至试图挤出最后一点性能?

      此外,如果您从数据库中读取数据,它将以不安全的方式传输给您。因此,如果有人在您查看用户密码时进行中间人攻击,那么中间人现在也知道这些密码。或者反过来:如果你的程序有一个漏洞可以被利用来访问用户的关键数据,这就是一个安全问题。如果您的代码一开始就没有这种能力,因为所有数据都由数据库在内部处理,那么您的代码中就没有任何安全问题。

      【讨论】:

      • 可以说,使用 PLSQL 不是一个好的做法,因为它从代码库中抽象出业务逻辑,使其碎片化。更不用说您与数据库耦合了。
      • 当然取决于你的任务,但是如果你有一个繁重的数据库解决方案,你通常会被绑定到一个数据库并且代码无论如何都会被碎片化。
      • ...这是一种糟糕的设计实践。
      • 有时性能比抽象设计更重要。尤其是如果您谈论通过代码或以 10,000 美元购买新硬件提高 20% 的性能
      猜你喜欢
      • 2012-11-09
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 2014-06-25
      • 2012-04-23
      • 2017-02-22
      相关资源
      最近更新 更多