代码之家  ›  专栏  ›  技术社区  ›  Daniel Auger

解决生产中的问题/调整NHibernate应用程序的策略

  •  0
  • Daniel Auger  · 技术社区  · 15 年前

    首先,我不是DBA,但我确实在这样一个环境中工作:DBA会不时调整/更改生产数据库,而不需要重新构建/重新部署应用程序。通常,这些更改包括修改索引、更改进程,有时还以较小的方式更改表结构(通常通过进程从应用程序中抽象出来)。

    我已经读了很多关于NHibernate的书,并在过去的几年中进行了实验,但我从未在生产环境中将其付诸实践。我还没有遇到一组“最佳实践”,以允许在部署后进行最大程度的调整。

    作为NHibernate用户,您和您的团队如何处理问题 如果它们在生产中出现

    3 回复  |  直到 15 年前
        1
  •  1
  •   Mauricio Scheffer    15 年前

    我还没有进入部署阶段,但在我当前的项目中,我已经遇到了这个问题,目前我的解决方案是用存储过程替换查询。只要从数据库返回的数据的形状保持不变,这就没什么大不了的。是的,在开发过程中你确实失去了一些你喜欢的敏捷性,但我不确定它是否像最初听起来的那样糟糕。当然,当您第一次进行更改时,您将有一个代码推送,然后从那时起,它只是过程更改。

        2
  •  1
  •   Webjedi    15 年前

    我处于类似的位置,为了让我们的DBA满意,我做了以下工作:

    1. 将这些查询外部化为文件,每个查询一个文件。

    通过这种方法,DBA可以 理论上 通过修改这些文件来调整查询。这与存储过程非常相似。

    在里面 ,由您决定是否真的让DBA访问这些文件(如果您明白我的意思…)

    我想DBA应该只使用DBMS的分析工具,并向开发人员报告她的发现(比如“有一个查询每秒运行20次,进行10次连接。这真的有必要吗?它可以缓存吗?你真的需要所有这些连接吗?我们可以将其反规范化吗?”等等)。

        3
  •  0
  •   tinonetic    8 年前

    您可以使用类似的分析器 NHProf 查看执行的sql查询,以便向DBA显示它们。此工具还可以检测一些问题,如n+1选择。

    使用第二级缓存可能很有用: http://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx