文档章节

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

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

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

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

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

本文转载自:http://blog.csdn.net/bluishglc/article/details/5959233

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
模型的过拟合

本文收录在无痛的机器学习第二季目录。 ICLR17会议的一篇名为《Understanding deep learning requires rethinking generalization》的文章引起了大家的广泛关注,而且在知乎上也引发了一系列...

冯超
2017/03/29
0
0
从哈希存储到Bloom Filter

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

Picasso
2011/09/24
0
0
基于深层神经网络的语音 增强方法研究

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

chenxiao60
2016/06/07
187
0
KMP字符串匹配算法

KMP算法,Knuth-Morris-Pratt Algorithm,一种由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pratt(V.R.Pratt)三人提出的一种快速模式匹配算法。 KMP朴素算法 原理:子串pattern依次与目标串tar...

长平狐
2013/01/06
167
0
一名工科生眼中的数学分析(上)

写完毕业论文后,闲来无事,准备梳理一下脑中的数学知识,能够建立更好的知识体系是我的目标,如果对试图厘清数分思路的同学有所帮助也是极好的。本来预计要写一篇文章的,结果写起来发现一篇...

zhenhang.sun
2016/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部