要在本地排序还是重新查询?

时间:2011-08-08 14:37:08

标签: java sql algorithm swing sorting

我正在开发一个java应用程序,它将以图形方式描绘和组织数百个对象。这些对象中的每一个都从SQL数据库加载,以便在此程序中使用。

用户对此数据进行排序,为了获得有关数据集的信息,我(作为程序员)遇到了三种不同的方法来实现这一目标:

  1. 使用单个SQL查询将预先排序的数据返回给程序。
  2. 在本地使用排序算法对整个数据集进行排序。
  3. 使用本地SQLite数据库将整个数据集复制到,然后查询本地数据库以进行排序。
  4. 哪个更好,还是有其他我可能错过的解决方案?

5 个答案:

答案 0 :(得分:2)

一般来说,所有解决方案都可以运作,这取决于具体要求 - 我的想法:

<强> 1。使用单独的SQL查询将预先排序的数据返回到程序

如果用户预先定义排序条件,则效果很好。如果她想在数据检索后求助(导致#2)怎么办?根据用户角色等特定条件,为每个请求或影响排序顺序的参数定义默认排序可能是有意义的。

<强> 2。在本地使用排序算法对整个数据集进行排序

如前所述,#1和#2的组合可能就是您所需要的。

第3。使用本地SQLite数据库将整个数据集复制到,然后查询本地数据库以进行排序

完全不同的策略,你需要关心的几件事情:

  1. 数据同步
  2. 安全;在大型企业工作,我知道某些安全人员(例如审计员)在谈论本地数据复制时会发疯。
  3. 离线功能(优势)
  4. 本地存储
  5. 个人选择:我会选择#1和#2的组合。此外,我尝试以支持滚动的方式定义界面(例如“检索行#20-100”)。

    不是一个明确的答案,但我的观点基于你提供的事实......

答案 1 :(得分:0)

如果可以的话,几乎总是在数据库中排序。它几乎总是比首先将未分类数据加载到程序中然后在代码中手动排序更快。

这样做的原因是因为数据库引擎已经过优化,只能做这种事情(双关语并非意图)。它们被设计为在检索数据,过滤数据和排序数据时非常快。它不仅在运行时方面更快,而且编码通常也会快得多。

为了排序数据,永远不要做#3。据我所知,这只是引入了不必要的开销和复杂性而没有增益。

答案 2 :(得分:0)

理想情况下,您只需查询数据库一次,然后将对象缓存在内存中。您可以使用默认(或动态配置)排序构造初始查询,然后在内存中对集合进行排序。

但是还有其他因素需要考虑。如果通过网络访问数据库,那么您真的应该在本地缓存对象。如果最终缓存对象,则必须确保缓存和数据库的状态保持同步。

答案 3 :(得分:0)

如果您的结果集只有几百个对象,那么您只需应用自己的排序算法即可获得很多。为了加快速度,您可以根据默认值对数据库中的第一次读取进行排序。

答案 4 :(得分:0)

我觉得SQLite方法将是更好的解决方案。

  • 编写自己的算法可能不如SQLite提供的那么好。

  • 与SQLlite相比,缓存不够好。