0

我的会员将能够使用X个小部件自定义他们的个人资料页面,每个小部件显示不同的数据,例如音乐列表,他们正在关注的人员列表等。NHibernate Eager Loading - 大量无关数据

几个小部件包括: - 媒体名单,他们已经上传 - 人名单,他们都跟随 - 人名单如下他们 - HTML /文本小 - 媒体统计(NUM下载等) - 其它评论插件会员发表评论

一些小部件将不得不页面返回数据,因为可能有数百个结果。

我没有做过的那一刻任何优化,所以它是做大量的工作DB的返回所有数据......这将是检索数据的最有效方法......每个小部件会1 DB调用可以接受吗?每页可能有5-20个小部件。

如果您需要了解我的情况的更多信息,请随时提问。

Paul

回答

0

因为你剪了你的工作部件的正确的事情将是每个插件为其所需的所有功能做一个查询。即使你通过AJAX检索小部件也是如此(正如cbp指出的那样,这不是一个坏主意)。

其次,我将建立某种机制为每个插件注册它的存在,然后将所有部件都注册后,然后我会炒单查询将包括所有部件查询。 (从技术上来说,它又是多个查询,但只需一次往返,请参阅NH参考中的MulriCriteria和MultiQueries)。

另外,不要忘记,惰性加载是隐藏的数据库检索,并且您可能会在正常加载的情况下使用延迟加载时产生巨大的性能影响(例如Foo.Bar.Name,您总是显示Bar .Name值当您呈现Foo实体时)

即使每次请求的数据库调用次数少于20-30次,性能也会下降,但这取决于实体,查询,过滤器的大小和复杂程度以及大小的检索数据集。

+0

谢谢你的答案...将修改我的应用程序通过ajax加载数据,并使用MultiCriteria加载尽可能多的数据。 – 2010-07-20 03:16:38

2

简短回答:这要看。

来自未优化的状态开始关闭,然后使用SQL事件探查器或C#探查像dotTrace制定出最好的地方进行改进。设定一个切合实际的目标(例如'小于800毫秒来加载页面')。

一般来说,我发现性能开始后,请求约20-30数据库调用受苦,但是这将取决于您的服务器上,数据库的位置等

有很多东西,你可以尝试:预缓存,使用连接而不是选择等方式进行热切获取。尽管除非智能应用,否则没有什么能够保证更好的性能。

对于具有许多小部件的页面,常见的设计模式是异步加载使用AJAX,而不是一次性加载整个页面每个插件。