从数据库中获取所有需要的数据是否更好?或者更频繁地发出请求?

时间:2013-01-25 08:55:26

标签: java database web-applications cq5

因此,我必须在CQ5(基于OSGi,Sling,JCR内容存储库的Java中的CMS)的帮助下开发Web组件

此组件应执行以下操作: 从用户收集三个问题的答案,然后,根据用户的答案,数据库的响应将提供给用户(可以说它是一个计算器)

第一个问题有5个答案变体,第二个问题有5个变体,第三个问题也有5个变体。

但问题是,如果用户选择了选项1作为第一个问题的答案,则第二个问题的可能答案数量将减少 - 只剩下3个可能的答案。

例如,用户有疑问: 你来自哪个国家? 你来自哪个州? 你来自哪个城市?

如果用户在第一个问题上回答加拿大问题,那么他将只能选择加拿大国家作为第二个问题的答案。

因此,在用户更改表单的事件中,其中的数据应通过ajax更新

所以,问题是:从数据库中一次获取所有数据是否更好(没有你看到的那么多),或者在每个“表单”上向数据库发出请求是否更好?改变事件“?或许,它没有任何区别?

就我而言,从需要编写的代码量的角度来看,第二种变体更好,但从性能的角度来看哪种更好?

2 个答案:

答案 0 :(得分:3)

应避免过早优化。我会采用多请求方法。就像你说的那样,它将使应用程序更加清洁。 然后,只有当它证明太慢时,您才可以查看缓存或前端加载该数据。

关于过早优化存在很多争论 - 一般意见是在你证明你需要它之​​前避免它!

答案 1 :(得分:1)

像往常一样:“这取决于”。对于具有状态的示例,如果仅限于北美,则预加载所有状态可能是有用的。一旦您的国家/地区列表增长并且状态数量增加,最好只从基础数据存储中获取所需的状态onChange

我也根据

的数量做出这个选择
  1. 用户可以选择的可能性(世界上只有少数几个国家或全部约200个国家?)
  2. 第二个选择框中的项目数量
  3. 如果用户应该能够在第二个选择框中看到不匹配的项目(如果项目仅被删除客户端,没有AJAX,只是简单的JS)
  4. 要求的性能(可以加载第二个盒子的第二个延迟的可能性,还是需要接近瞬间?)
  5. 评估这些点通常会给你一个很好的经验法则。对于具有3 * 5种可能性的实际情况,从数据库预加载所有可能性并在程序代码中进行过滤似乎是一种理性的选择。