gpt4 book ai didi

NHibernate二级缓存性能问题

转载 作者:行者123 更新时间:2023-12-04 06:27:13 24 4
gpt4 key购买 nike

我正在使用 NHibernate 使用 session per request 模式开发 MVC 应用程序。大多数时候用户只是读取数据,因此我试图通过以下方式使用 NHibernate 的二级缓存:我已经设置了 SysCache 并使我所有的持久实体都可以缓存(缓存使用=“非严格读写” ) 并在应用程序启动时调用从数据库中加载所有常用实体,如下所示:

var all = Session.QueryOver<T>().Cacheable().List<T>()

出于评估目的,我跟踪了上述调用的执行时间,对于大约 50000 个结果,第一次大约为 5 秒,对缓存查询的任何后续调用大约为 2.5 秒...... NHibernate Profiler 说对数据库的查询花费更少超过 100 毫秒,那么什么需要这么多时间呢?我尝试切换提供程序,但使用 Velocity 和 Memcached 得到了类似(如果不是更糟)的结果......我几乎阅读了我能找到的关于 NHibernate 及其使用二级缓存的所有内容,我认为,虽然我可能不完全正确,但在上面的语句中会发生什么:构造了 50000 个对象,它们的数据存储在实体和查询缓存中, session 时间戳保存在时间戳缓存中。在 i5 机器上怎么可能需要 5 秒钟?即使这是正常的,如何在后续调用中读取缓存数据需要 2.5 秒,而中间没有任何更改?由于我对 NHibernate 比较陌生,你们中的任何人都可以帮我弄清楚我做错了什么吗?任何帮助将不胜感激......我已经把头撞在墙上一个星期了......

最佳答案

您不应该在缓存中放置 50000 个实体,这会否定拥有数据库的意义,尤其是当您的数据来自 SELECT * FROM TABLE 时。如果它来自一个非常昂贵的查询,那么缓存成本小于查询成本,它应该放在缓存中。

使用查询来获取特定数据。然后,查找进行最多查询的页面,并优化它们,必要时使用缓存。

关于NHibernate二级缓存性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6068932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com