我对编程很新(刚刚读完大学)。
在过去的4年里,我一直在思考面向对象的开发以及这种方法的众多优势。
我的问题是
在开发应用程序中使用纯面向对象的数据库不是更容易吗?
为什么面向对象的数据库不像关系那样分散?
从我的观点来看,使用OO数据库是有意义的,后者将避免在表格上映射复杂对象所需的众多构造。
答案 0 :(得分:14)
过去曾为一家面向对象数据库公司工作(www.objectstore.com) - 而且目前 - 我认为我对于什么使它们变得更好以及是什么让它们变得不那么伟大有一个公平的见解。
很好:
没有对象关系不匹配。如果要将对象x在内存中存储到持久性存储,ObjectStore可以通过近实时保证来实现。我们的产品已被许多公司用于满足关系数据库或ORM引擎难以实现的残酷时间要求。
没有对象关系不匹配 - 你在对象中开发,你在对象中思考,你存储在对象中。
不太好:
ORM:对象关系管理器几乎使对象数据库无关紧要
架构演变:更改类以添加字段,现在您必须变形整个ENTIRE数据库。多年来,ObjectStore对此已经变得更加智能,但对于许多OODBMS来说,它仍然是一个痛点。
糟糕:
工具支持 - 这使得OODBMS成为大多数地方的非首发。今天的每个人都可以使用Crystal Reports或Access或Excel,并生成大量的报告。使用OODBMS,您必须通过程序员构建此逻辑,并且我们都知道当您需要预算报告时考虑到您在设计时没有想到的某些xyz参数时可能发生的速度有多快。
工具是OODBMS在市场上失败的原因。不是技术优势或性能或语言支持(ObjectStore支持C ++ / Java / .Net并且支持COM以支持任何IDispatch语言,如VB,Perl等)。
所以我在这里说了一些贬低的话,尤其是我真正喜欢的产品。但是ObjectStore在非常具体的任务中非常棒,但是构建webapp的选择很差。虽然在某一点上,它正在推动Amazon.com的库存管理后端。
答案 1 :(得分:9)
正如你所说的那样,你刚从大学毕业,并且刚刚以“真实(面向对象)的方式”被强烈灌输。另一方面,如果你学习了声明性编程,数据库设计和集合论,你会发现关系模型是一种非常合适的方法,基于理论,而OO是一种更实用的方法,主要是在工业中发明的。而不是学术界。实际上,大多数有关数据库问题的有趣研究和开发都是由具有更多数学背景的人员完成的,对于他们来说,关系模型是处理数据的更自然的方式。因此,与面向对象的对手相比,RDBMS往往更稳定,可扩展,更可信。面向对象的数据库,就像XML一样,通常用于不明智的尝试,使数据符合使用它的程序,而不是相反。
答案 2 :(得分:6)
使用这种方法没有任何好处,当你已经有一个大小为千兆字节的关系数据库已经存储了20年的数据并且有数百或数千个表时。这是许多商业应用程序的真实世界。数据库不仅仅用于特定应用程序的对象映射。在您编写的应用程序消失后,数据库仍将存在很久。咬紧牙关,学习关系数据库,因为它们在未来100年内不会随时消失。
答案 3 :(得分:2)
十年前,我研究了面向对象的数据库设计(针对个人项目)并发现他们不是很擅长轻松或快速地进行某些类型的搜索(比如说“找到姓氏以'S开头的所有人'),虽然当然在面向对象的数据库中不需要很多关系查询。而且,当时面向对象的数据库还没有真正为大规模部署做好准备(这无疑是我的一个问题)我相信新的问题已经解决了这个问题,但是仍然存在大量的intertia和良好的ORM使得使用关系数据库相对容易。
然而,离开关系数据库有一个变化,请参阅the NoSQL movement。我相信Google不会使用关系数据库(但也不是面向对象的,而是专有的和分布式的)。
答案 4 :(得分:2)
答案 5 :(得分:1)
没有充分的理由,尤其是ORM(Active Record)使用的起义以及映射的痛苦。面向对象的数据库在许多方面更快更好。不受欢迎的原因是需要。到目前为止,RDBMS一直做得很好,在大型企业中,最大的痛苦被称为“迁移”。与大多数技术一样,用户的需求是主要目标,而面向对象通常不是卖点。速度可能,但昂贵的硬件和经过验证的RDBMS调优也可以实现性能。
此外,熟练掌握这一领域的人员必须再次接受培训(这需要花费很多时间)。更不用说那些学习了邪恶的PL / SQL的昂贵的顾问......
我会说,做个先行者。就像圣雄甘地所说的那样,是你想要看到的变化。 有趣的是,你让我想要谷歌开源OO-DB。
答案 6 :(得分:1)
采用面向对象数据库这么慢的一个原因是,OpenSource的可扩展替代方案并不多。对于RDBMS,例如MySQL(现在拥有Oracle),PostgreSQL等等。
另一个问题是,至少对于Java来说,用于RDBMS的标准API访问ORM部分的JDBC和JPA有更大的公司,并且更为人所知。面向对象数据库访问的JDO是一种标准,但不是很受欢迎。
面向对象的数据库在大多数情况下比RDBMS具有更强的API或语言锁定,这是具有多种平台和语言投资的大公司保留RDBMS的另一个原因。
对于我个人而言,流行的OpenSource OO数据库将是一个投入更多时间来尝试它们的理由。
答案 7 :(得分:1)
数据库不只是存储和检索对象,否则OODB和文档DB将占据全世界。其他用法上下文/方面包括:
最后,有一些行业惯性正在发生,主要供应商不愿意为客户不愿意支付的东西下注,而且客户等待观望,直到主要供应商加入游戏。
答案 8 :(得分:0)
另一个问题是语言支持。那些不面向对象的语言呢?无论使用何种语言,每个人都需要访问一个好的数据库。这就是为什么许多语言特定的数据库失败,因为他们的市场只是那种语言的人。
还有迁移因素。 MySQL的最大用户是长时间用户。迁移到一个全新的数据库系统,使用完全不同的基础设计和现有的大型数据库系统将非常昂贵并且几乎没有回报。