【问题标题】:Performance difference between embedded class and @ManyToOne嵌入式类和@ManyToOne 之间的性能差异
【发布时间】:2017-01-10 21:06:12
【问题描述】:

C 是一个具有另一个类D 作为其属性的类。原则上,将D 存储为C 的嵌入类在检索时必须比通过@ManyToOne(甚至@OneToOne)将其存储为单独的实体提供更好的性能,因为在后一种情况下,D 需要从可能包含数百万行的单独表中检索。

我的问题是这种性能差异是否显着,即在决定嵌入和@ManyToOne 之间时,它是否足以抵消其他考虑因素。

我意识到这个问题有点软,我想我正在寻找的是人们根据经验来回答。

【问题讨论】:

  • 为什么将其存储为嵌入式会为您提供更好的性能?这不完全取决于您的数据库模型和使用情况,以及您是否需要检索或搜索那些可嵌入字段?
  • 因为DC 位于同一行,并且不需要访问单独的表?我确信在某些情况下差异可以忽略不计,我正在询问不是的情况。
  • ManyToOne 向后暗示 OneToMany,因此您暗示您在行中存储重复数据。从 JPA 的角度来看,这根本不是问题,但从您的数据库和网络的角度来看,这本质上是一个关于规范化的主观问题。
  • 很公平。感谢您指出,这本质上是要求标准化对性能的影响!

标签: mysql eclipselink jpa-2.0 database-normalization denormalization


【解决方案1】:

我的(也很软,就像你的问题一样)答案是'总是以最好的方式制作生活模拟(模型)'。 我给自己设定了一个引导性的问题:有“小班”独立生活吗?还是只是概念胶(比如 street+home+local 命名为Address)?许多实体在概念上可以相等吗?蜜蜂“小班”字段可以为空(喜马拉雅山登山基地的地址) - 可以为空@OneToOne? 哪种 Java 模型更好(真实、自然)?

而且我只记得一个“实施问题”:“小班”的领域是否总是使用(阅读)-非常罕见,可以作为 Lazy 服务,特别是大。将 sense 'Memo' varchar(4000) 字段移动到 extern 表是好的(附带字段:日期、备忘录作者等)。

编辑:“小班”有多大,很少使用?

在一个项目中Address 被正确建模为独立表,在另一个嵌入中。

几乎可以通过良好的逻辑模型获得正确的性能结果。考虑极端的“仅 JPA 性能”和逻辑错误会导致降级是代码中的其他地方。

我的观点是:按逻辑论证设计。性能可能会有所不同。

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 2011-01-19
    • 2011-10-30
    • 1970-01-01
    • 2010-11-21
    • 2012-05-26
    • 2013-09-02
    • 2014-03-15
    相关资源
    最近更新 更多