我漂亮的新编程(只完成了大学).

我一直认为,在过去4年来关于面向对象的发展和许多优点的这种做法。

我的问题是

是不是更容易使用一个纯粹面向对象的数据库中开发的应用程序?

为什么面向对象的数据库都没有那么多漫作关系?

从我的角度来看是有道理的使用面向对象的数据库,后者将避免许多建设必要的映射的复杂的目的在桌子上。

有帮助吗?

解决方案

具有作为一个面向目标的公司数据库中的过去(www.objectstore.com)和目前-我想我有一个公平的了解是什么使得他们很大的,什么使得它们不那么大。

伟大的:

没有象关系的不匹配。如果你想要保存对象x在内存到一个持久性存储、项目规可以做它与近实时的保证。我们的产品已被用于许多公司能够满足残酷的时间要求将是艰难的有关系数据库或奥姆引擎。

没有象关系不匹配-你开发的对象,你认为对象,则存在对象。

没有那么大:

对象:对象关系管理人员有相当多的成的对象数据库的数据无关紧要

模式的演变:更改类添加一个领域,现在你有演变的整个数据库。项目规已经变得更聪明关于这种多年,但它仍然是一个痛点对于许多oodbms缺乏.

坏:

工具支持-这是什么让oodbms缺乏一个非启动对于大多数地方。每个人今天可取水晶的报告或访问或Excel和产出bucketloads的报告。与oodbms缺乏,就必须建立这种逻辑,通过一个程序员,并且我们都知道那是可能发生的,当你需要你的预算报告考虑到一些xyz参数,你不认为在设计时间。

工具是为什么oodbms缺乏未能在市场上。不技术优越性或性能或语言支助(项目规支持C++/Java/.净额和已经支持COM支持任何IDispatch的语言,如VB,Perl,等等)。

所以我说了一些歧见的东西在这里,特别是有关产品的,我真的很喜欢。但是,项目规是真棒在非常具体的任务,但是穷人的选择,为建立一个网络应用程序.虽然在一个点,就是驱动的库存管理的后台 Amazon.com.

其他提示

当你的状态,你是刚毕业的大学生和刚刚在唯一的真(面向对象)的方式灌输强烈。如果在另一方面,你学会了声明式编程,数据库设计,并且集理论,你会意识到,关系模型是完全够用的方法,在理论上良好接地,而面向对象是已大多在行业发明了一种更务实的做法而不是学术界。碰巧,最有趣的研究和开发数据库的问题正在被人们用更多的数学背景做了,对他们来说,关系模型是更自然的方式来处理数据。其结果是,RDBMS中往往更加稳定,可扩展性,以及比他们的面向对象的同行信赖。面向对象的数据库,很像XML,经常处于不明智的,企图使使用的数据符合使用它的程序,而不是周围的其他方法。

有使用这种方法没有优势时,你已经已经关系数据库大小为几GB的存储20年数据已经和拥有表的数百或数千。这是许多业务应用的真实世界。数据库用于很多比你的特定应用程序的对象映射。该数据库还将你写都不见了申请后长期存在。硬着头皮和学习的关系数据库,因为它们不会在未来100年内消失的任何时间。

十年前,我看了一下面向对象的数据库设计(对于一个个人项目),并发现他们不轻易或迅速地做某些种类的搜索非常好(说“找到所有的人的姓氏打头作者: “),当然,也有很多未在面向对象的数据库所需关系查询。另外,当时面向对象的数据库是不是真的准备好大规模部署(这诚然是不是我关心的问题)。我相信,较新的有固定的问题,但仍有很多intertia和使用关系数据库比较容易良好的ORM的化妆的。

然而,有一个运动远离关系数据库,请参阅 NoSQL运动。我相信谷歌不使用关系数据库(也没有面向对象,而一些专有的和分布式)。

道歉未能加入本作中,它真正应该出现的地方注释。

但是,以下内容构成对我的人身攻击,我调用我的回应的权利。

  

虽然我在实践中同意你的观点,我与你在精神上不同意,我认为你是谁的被洗脑相信(也许我把话传给你)是基于集合的是唯一的出路之一。

FWIW,我肯定没有被“洗脑”成什么样,你可能会称之为“关系宗教信仰”。洗脑是当一些老师说了什么,和学生盲目brainlessly接受,作为没有任何形式的批判性思维的唯一真理。事实上,我甚至从来没有人教的关系模型。事实上,我不得不由我自己来发现所有的一切。这是一个事实记录事,我都表示对约会对象的视图上更新的问题的看法严厉的批评。 (更正:“是”的记录其实是一个问题的页面,似乎已经从它被公布的网站上移除可能有什么都做的事实,日期确实已经放弃了我批评的观点更新位置。)

所以,我认为我有充分的理由说,任何要求,我曾经让自己被洗脑,是彻头彻尾的propostrous。你可以自由地想请你,但如果你公开表达任何无端的和基于-在全无的个人意见,我希望你也够的长大了,看到他们反驳的事实,并承认这一点。

为什么分层和网络模型已经被取代由RM原因已充分全面的关于这一主题的书籍整个库文件。我请你仔细检查这些。

至于“键值接管市场”:你完全可以自由地采取“市场上最常见的意见”(即:平庸的大多数太懒惰到想换自己愚弄谁非常高兴让自己(和他们的意见)由Ellisons和盖茨夫妇和这个世界的Jobses牵头)至于什么是有价值的主要尺度,什么不是。我个人认为一个愚蠢的事情,但这只是我个人的意见。我复制粘贴在这里的人谁面临EAV和他的职业生涯中,几乎每天都在关键值的恐怖提出了一些意见:

  

我对使用下面的“EAV模式”的应用程序的工作(至少,有“EAV模型”我理解)为多,但不是所有的,逻辑的表:

R1 {EAV_RELVAR_NAME*, ... }
R2 {EAV_RELVAR_NAME*, ATTRIBUTE_NUMBER*, COLUMN_NAME, DATA_TYPE, ...}
R3 {EAV_RELVAR_NAME, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ..., ATTRIBUTE50}
     

在其中一个可能会看到以下值:

R1 { {'STATE_CODES'} }
R2 { {'STATE_CODES', 1, 'STATE_NAME', 'CHAR(30)'} ,
     {'STATE_CODES', 2, 'STATE_CODE', 'CHAR(2)' } ...}
R3 { {'STATE_CODES', 'ALABAMA', 'AL'} ,
     {'STATE_CODES', 'ALASKA',  'AK'} ...}
     

基本上, “EAV relvars” 创建/改变/下降与插入/更新/删除到R1和R2(与DDL)。这是我们整个模型的下调版本:有R1和R2附加列指定EAV,主键,EAV-外国键,业务规则,等等......所有嵌入了“一个程序代码执行真前端”的模式。

     

今天上午,我不但了解了一个20 +工时的考验时,制度的几点思考CODE_XYZ将是ATTRIBUTE2,但是系统B实际上它定义成ATTRIBUTE3了会导致......我在的事实,我是笑半收听谈话,和半阅读EAV该组的话语。

     

上个月,我把在紧急更新(16工时加“坏标记”的应用程序),以改变ATTRIBUTE16从“2010年5月”到“MAY-2010” 430用户输入的数据点。

     

关于我们的代码发布的5%-10%都伴有“星期一上午运行时错误清理”,因为EAV_RELVARs没有编码到R1或R2相同的生产如在测试/开发(包括应用程序代码和DDL完成与严格-版本软件控制迁移......我们的EAV模型不束缚于这样的官僚机构,因为它“让”开发商成立自己的汽车EAVSnomously在dev的,测试和PROD)。

     

去年,我花了坚实的3周调整复制软件专门对付缺乏R3主键。

     

我曾经为无法道歉把索引上EAV_RELVAR_NAME_x的ATTRIBUTE4,因为它被搞乱了所使用EAV_RELVAR_NAME_z不同程序的性能。

     

两年前,经过几年的下沉数百小时永恒调整了需要加入到R3复杂的查询,我终于度过了3个月分裂R3为数百个物理分区(每EAV_RELVAR_NAME之一)的,为了给DBMS优化所需的统计数据看,有,例如,50“的state_codes” 200,000“LOCATION_CODES”。我祝贺巧妙的解决方案,但讽刺的是,在大家都错过了,当我指出,这种变化,将有一个新的政策,从而增加新的EAV_RELVAR_NAME将需要运行的添加相关的分区R3脚本(是的与DDL)。

     

我的客户想要将数据加载到R3为他们EAV_RELVAR_NAMEs的一个新的前端(同时实施所有适当的约束和安全性),他们想知道为什么需要4个月才建成。

     

我经常指出的是,我可以重写的方式,这是在各方面都优于整个EAV系统,采用动态DDL对数据字典的,而不是针对R1和R2 DML,但我总是告诉我们”再“承诺”,以这种方式(有一个7位数的前期支出来构建它,我们不得不改写我们的代码库的98%,切换到独立表),并且两端不不择手段。

如果你真的相信,这样的场景是在RM上的改进,然后通过各种手段继续。不要怪我多少伤害,当你终于碰你的头在墙上。

有没有很好的理由,特别是与ORM(活动记录)使用的崛起和映射的痛苦。面向对象数据库在许多方面更快,更好。其原因不被流行的是需求。到目前为止,RDBMS已经做好和大型企业,最大的痛苦被称为“迁移”。与大多数技术,用户的需求是首要目标,和面向对象通常不是卖点。速度也许,但昂贵的硬件和成熟的RDBMS调谐可以实现性能为好。

另外谁是熟练这方面的人,将不得不重新培训的(它的价格bunchies)。更何况人昂贵的顾问谁学会邪PL / SQL ...

我会说,是一个先发。像圣雄甘地说,是你想看到的变化。 好笑的是,你只是让我想谷歌的一个开源的面向对象的数据库。

原因之一,采用面向对象的数据库是如此之慢是,是不是很多可扩展的开放源代码的替代品。对于RDBMS有例如MySQL的(现在Oracle拥有),PostgreSQL和许多更多。

另一个问题是,至少对Java进行访问RDBMS的JDBC和JPA标准API的一部分ORM背后有大公司和更广为人知。 JDO对于面向对象的数据库访问是一个标准的,但不能作为流行。

面向对象的数据库,在大多数情况下更强的API或语言锁定RDBMS相比,这是另一个原因,大公司有多个平台和语言投资留在RDBMS。

对于我个人流行的开放源代码数据库,面向对象是有原因的投入更多的时间放在试图出来。

数据库不仅是有关存储和检索的对象,否则OODBs和文件DBs会必须采取的世界。其他使用上下文/内容的方面包括:

  • 聚合数据和做复杂的批数据处理/操纵。Rdbms是很擅长这个。
  • 其他重要的方面是并发/隔离(即交易)。Rdbms是非常成熟的在这个区域。
  • 另一方面是编制索引,以确保快速查询。
  • 另一方面,像"克里斯*卡明斯基"上述提到的能够发展模式随着时间的推移而维护的数据。

最后,还有一位的行业惯性会上,与主要供应商不愿意打赌钱的东西的客户是不是准备支付,而该客户在等待观望,直到主要供应商加入游戏。

的另一个问题是语言支持。怎么样那些不是面向对象的语言?一个好的数据库需要通过每个人都可以访问,不管是什么语言。这就是为什么很多语言的特定数据库的失败,因为他们的市场是语言的唯一的人。

有也是迁移因子。 MySQL的最大用户是很长一段时间的用户。迁移到一个全新的数据库系统与大量现有的将是非常昂贵的,并给予奖励少。

一个完全不同的基本设计
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top