文档章节

由大集合的映射引出的深层的OR不匹配问题

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 692
阅读 12
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

      很多优秀的ORM工具只解决了对象模型和关系模型在结构上的不匹配问题,但是在行为层面上,这两种模型也有着各自不同的运作方式,这种不匹配似乎更难以弥合。在一个典型的一对多关联中,如果多方是一个数量巨大的集合,那么几乎在任何情况下,我们都不能直接加载这个集合到内存中,进而也就不会有基于这个集合的任何遍历或过滤操作。这些操作本应是对象模型的一些基本行为模式,而在“巨大数据量”的现实面前变得幼稚而可笑。

      是对像模型错了么?如果我们不映射这个一对多关联又会怎样呢?从对象模型的角度看,关联双方的关联关系往往反映的是业务层面上事物间深刻的内在关系,这种关系本身就是业务逻辑的一部分,去除这种关联,会能让对象模型无法揭示真实的业务逻辑,变得和真实的业务模型渐行渐远,也就失去了建立对象模型的意义。
      因此,关联关系是一定要在模型中做出来的,但在目前这种尴尬的境地下,只有Domain Collection能从一定程度缓和这一矛盾,但也仅限于对集合的遍历操作。至于包含复杂规则的过滤操作,可能需要specification模式的帮助。这一点需要进一步的实践。

      最后接着大集合的这个例子再扩展开来讲,在对象模型中,“定位”某个对象往往是从某一已知对象(往往是聚合根)一步步“导航”得到的。这一过程暗含了这样的背景:即所有对象都已载入内存,可供程序任意导航,这显然是过于理想化的要求。相较而言,通过关系模型的关系运算直接查找到某一对象要高效的多得多。但如果我们这样做了,我们将不得不失去另外一些东西,那就是在对象模型中“导航”的过程既是业务逻辑的体现也是通过对象模型求解的过程。而现在你只能把这些揉碎掺杂到一条SQL中去了。你不能否认的是,在不考虑性能的前提下,通过导航找到一个对象要比一条SQL来得自然的多。这也是我认为OR关系中最难以调和的矛盾。

猪刚烈

猪刚烈

粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
加载中
请先登录后再评论。
Mybatis配置问题总结

1.MyBatis ofType和javaType区别 JavaType和ofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型。 pojo类: user.xml...

wangwei2134
2018/08/22
0
0
从哈希存储到Bloom Filter

从哈希存储到Bloom Filter 焦萌 2007年1月28日 先解释一下什么是哈希函数。哈希函数简单来说就是一种映射,它可取值的范围(定义域)通常很大,但值域相对较小。哈希函数所作的工作就是将一个...

Picasso
2011/09/24
31
0
深度学习中几种常用的模型

  最近再从事深度学习方面的工作,感觉还有很多东西不是很了解,各种网络模型的结构的由来还不是很清晰,在我看来所有的网络都是一层层的卷积像搭积木一样打起来的,由于还没实际跑所以还没...

osc_ew3qs9k1
2018/03/27
2
0
基于深层神经网络的语音 增强方法研究

近年来,随着深层神经网络(在语音识别领域的成功应用,给了语音增强任务的研宄人员很多启发。的深层非线性结构可以被设计成一个精细的降噪滤波器。同时基于大数据训练,可以充分学 习带噪语...

chenxiao60
2016/06/07
571
0
ResNet论文总结

ResNet论文总结 一、简介 论文全名:《Deep Residual Learning for Image Recognition》 我们都知道一个卷积神经网络的网络深度是很重要的,通常增加网络深度可以提升网络的准确率,但是很深...

osc_ncgu99wr
2019/07/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

YGC问题排查,又让我涨姿势了!

在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务超时...

erlieStar
昨天
0
0
碰上这4种项目经理,项目必死无疑

项目经理不是谁想当就能当的,除了精通业务,至少懂一些基础的技术知识外,还要拥有“项目经理式的人格”。 比如:任务导向、目标意识、高效、灵活、计划性强等。 而与之相对的,有四种类型的...

logiter
2019/12/20
0
0
Oracle 11g 数据库的部署

新手入门之Oracle 11g部署 Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目...

开源仔
26分钟前
0
1
整理 Linux下列出目录内容的命令

在 Linux 中,有非常多的命令可以让我们用来执行各种各样的任务。当我们想要像使用文件浏览器一样列出一个目录下的内容时,大家第一时间想到的是 ls 命令。但只有 ls 命令能实现这个目的吗?...

osc_q7wo0k6s
27分钟前
16
0
漫画:什么是SnowFlake算法?

本文转载自公众号 [程序员小灰] ————— 第二天 ————— 方法一:UUID UUID是通用唯一识别码 (Universally Unique Identifier),在其他语言中也叫GUID,可以生成一个长度32位的全局唯一...

无敌码龙
2019/03/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部