- 我应该通过数据库条目动态生成菜单/按钮/导航栏,还是通过代码静态生成?
- 我应该通过Java计算列表条目数,还是通过数据库查询?或者您可能会遇到更多的数据库与Java代码问题。
数据库很慢。Java代码相对非常快。如果可能的话,在内存中缓存从数据库中检索出的所有内容,可能使用像memcache这样的东西(如果适用;我不做太多Java网络编码)。
使用数据库存储可变数据。如果应用程序具有动态更改菜单/按钮/导航的功能,请将它们放入数据库中,否则不要这样做。内容管理系统通常会这样做。
历史上,访问数据库速度较慢。对于通过网络访问的数据库(三层架构),尤其如此。因此,您应该避免访问数据库,限制数据库调用数量,并限制与数据库的连接数量(可能使用连接池)。典型的例子是Oracle、IBM DB2、MS SQL Server。新的数据库有MySQL和PostgreSQL。
有一些新的数据库可以在内存中运行或嵌入应用程序中。这会快得多。这方面的一些典型Java数据库是HSQLDB和较新的H2 database。它们也支持客户端/服务器操作,但它们不像上述的数据库那样成熟。
但是,即使是内存中和嵌入式数据库的速度也不及使用集合API的速度快。
你的数据库应该作为一个容器,用于保存需要持久化的应用程序数据。根据你所处理的数据类型,你需要做出决策:
对于应用程序配置(菜单项、标题栏名称、按钮名称等),考虑使用某种属性文件。如果你的应用程序有很多用户,并且每个用户的配置都不同或者属性过多,考虑使用数据库进行持久化。
对于模型数据(人员、地址等),考虑使用数据库,因为这是你的应用程序重要的信息。此外,你还可以从数据库中受益,以便在应用程序之外进行报告和分析。
总的来说,你应该在Java代码中对数据进行所有计算。这就是使用应用程序层进行业务逻辑和仅将数据库层用于持久性的概念。
在使用Java执行所有数据操作方面,有一个例外 - 大多数数据库在排序数据方面非常高效,如果需要,应在查询中使用它们来对结果集进行排序。根据数据集和表实现的情况,将数据在DB端排序并将其放入Java应用程序中的列表中可能比获取数据然后在Java中进行排序更有效。
最后,如果您需要频繁使用数据,请考虑在Java中缓存它,而不是从数据库查询。正如其他帖子所提到的那样,创建数据库连接、执行查询、解析结果比仅仅访问堆更加昂贵。创建一个模型(气泡和线条),并确定作为核心数据的实体,使用它们创建类。这就是你放入数据库中的内容。(或者,你可以从实体模型创建关系模型。但这往往会导致程序中出现糟糕的模型。)
最初,不要担心缓存等问题,但我承认,在设计模型时考虑数据库性能也是好的。
制作一个清晰的模型,支持你想要做的事情。
关于数据库中的“配置”,请考虑以下几点:如果你的配置不能在不更改代码和重新部署的情况下进行更改,那么这就没有意义。真的。这只会使维护变得更加困难。
还要阅读以下内容:
http://thedailywtf.com/Articles/Soft_Coding.aspx
以及这个:
http://thedailywtf.com/Articles/The-Mythical-Business-Layer.aspx