- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 NHibernate 加载不同类型的对象的大树。映射是使用 table-per-subclass 策略实现的。我定义了一个基类“Node”,它只有几个字段(NodeId、ParentId、NodeType)和几个从 Node 继承并添加自己的字段的子类。
这种方法的实现很简单,我不能提示性能。使用一次往返,在几百毫秒内在我的旧机器上填充了一个包含 10 000 个不同类型对象的大树。然而,有一件事情让我担心:这种策略会导致生成一个复杂的查询,其中 Node 表与对应于定义的子类的每个其他表进行外部连接。虽然当不同子类的数量很少时这很好,但如果数量增加,则 OUTER JOIN 复杂度也会增加。
为每个类定义表似乎不是一个优雅的选择,并且从基类中选择数据时它会运行缓慢(因为 UNION)。其他选项似乎会增加到数据库服务器的往返次数。
那么在填充由不同类型的实体组成的大树时,您认为什么是最佳实践?有什么比每个子类的表更好的吗?
最佳答案
你在这里处理两个问题:
From the Nhibernate Documentation (This is a cache Nhibernate Forge was down)
Use hand-coded ADO.NET in bottlenecks.
In performance-critical areas of the system, some kinds of operations (eg. mass update / delete) might benefit from direct ADO.NET. But please, wait until you know something is a bottleneck. And don't assume that direct ADO.NET is necessarily faster. If need to use direct ADO.NET, it might be worth opening a NHibernate ISession and using that SQL connection. That way you can still use the same transaction strategy and underlying connection provider.
关于inheritance - 使用 NHibernate 从数据库填充大树时的表每个子类策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1868359/
我是一名优秀的程序员,十分优秀!