性能:Java与数据库

时间:2010-09-10 14:29:29

标签: java performance web-applications

编程时,有决定一直在做,如:

  • 我应该从数据库条目动态生成我的菜单/按钮/导航,还是通过代码
  • 生成静态
  • 我应该通过Java计算列表条目还是触发数据库查询 ..或许你可以找到更多这些DB与Javacode的问题。

(我希望这个问题不太常见:)

对于Web应用程序中的性能问题,您的数据库应该做什么以及Java代码可以更好地完成哪些练习。

小型和大型项目之间的差异可能是合理的

6 个答案:

答案 0 :(得分:4)

扩展Ignacio的答案:数据库通常有很大的延迟(除非它在物理上位于同一台机器上),所以你想尽可能少地点击它。如果你使用像Hibernate这样的ORM,你可以免费获得缓存和延迟加载;否则你需要自己照顾这些。

因此可以从DB 中获取GUI元素数据 - 然后在本地缓存和重用它。如果已经拥有所有元素,最好在本地计算列表条目。如果您还需要查询,可以尝试将提取组合成一个。但是,如果你有一个巨大的列表,并且你想从中选择相对较少的元素,那么最好让数据库完成工作并只返回所选的条目,而不是填写一个大的通过慢速网络连接的数据量。

答案 1 :(得分:1)

数据库很慢。 Java代码相对来说非常快。如果可能的话,缓存从内存中从数据库中提取的所有东西,可能使用像memcache这样的东西(如果相关;我没有做太多的Java Web代码)。

答案 2 :(得分:1)

将数据库用于可更改的数据。如果应用程序功能可以动态更改菜单/按钮/导航,则将它们放在数据库中,否则不要。内容管理系统经常这样做。

答案 3 :(得分:0)

历史上,访问数据库的速度很慢。对于通过网络访问的数据库(3层体系结构)尤其如此。这就是为什么你应该避免访问数据库,限制数据库调用的数量,以及限制与数据库的连接数(可能使用连接池)。典型示例是Oracle,IBM DB2,MS SQL Server。较新的数据库是MySQL和PostgreSQL。

有一些较新的数据库可以在内存中运行或嵌入在应用程序中。那要快得多。此区域中的一些典型Java数据库为HSQLDB,而H2 database更新。它们还支持客户端/服务器操作,但它们不像上面提到的数据库那样成熟。

但即使是内存和嵌入式数据库也没有使用集合API那么快。

答案 4 :(得分:0)

您的数据库应该充当容纳需要为您的应用程序保留的数据的容器。您需要根据您正在处理的数据类型做出决定:

对于应用程序配置(菜单项,标题栏名称,按钮名称等) - 请考虑使用某种属性文件。如果您的应用程序有很多用户,并且每个或过多的属性配置都不同,请考虑使用数据库来保留。

对于模型数据(人员,地址等) - 考虑使用数据库,因为这是您的应用程序的重要信息。此外,您可以从此处的数据库中受益,以便您可以在应用程序之外进行报告和分析。

通常,您应该对java代码中的数据进行所有计算。这是将应用程序层用于业务逻辑和数据库层的概念,仅用于持久性。

使用java对数据执行所有操作有一个例外 - 大多数数据库在排序数据时都非常有效,如果需要,应在查询中使用它来对结果集进行排序。根据数据集和表的实现,在数据库端对数据进行排序并将其放入Java应用程序中的List可能比获取数据然后在java中排序更有效。

最后,如果您需要经常使用数据,那么请考虑在java中缓存它而不是从数据库中查询。正如其他一些帖子所提到的,创建数据库连接,执行查询,解析结果比仅仅在堆中访问更昂贵。

答案 5 :(得分:0)

创建模型。 (Bubbles and Line)并识别作为核心数据的实体,使用它创建类。这是您放入数据库的内容。 (或者,您可以通过其他方式执行此操作,从您的实体模型创建关系模型。但这可能会导致您的程序中出现一个糟糕的模型,而不是通常。)

最初,不要打扰缓存等,但我承认在设计模型时也要记住数据库性能......

制作一个明确的模型,支持您要做的事情。

关于数据库中的“配置”,请考虑这一点:如果在不更改代码和重新部署的情况下无法更改配置,那么它没有意义。真。维护起来会更难。

另请阅读:
http://thedailywtf.com/Articles/Soft_Coding.aspx

而且:

http://thedailywtf.com/Articles/The-Mythical-Business-Layer.aspx