24日一篇Qi4j and the
NoSQL
movement文章开始谈Evans
DDD
和数据库的关系,指出如何使用对象替代关系数据库设计。
JavaZone 2009 第二个介绍就是"På tide å kaste ut relasjonsdataben"(Is it time to throw out the
relational database? 是时候扔掉关系数据库了?),这是为替代关系数据库寻找替代物。
作者总结说:,它发现更多人使用关系数据库其实在做下面四件事情:存储对象storing objects, 查询这些对象querying them, 报表reports, 和备份 backups。关系数据库只擅长报表,其他都是垃圾,对象和关系数据不匹配object-relational impedance mismatch 是大家都知道,Evans
DDD
难以使用OR mapping映射实现是大家的共识。
在Qi4j中有显式SPI 支持用来存储和查询对象,彼此是分离的,存储对象使用EntityStore实现,查询对象用EntityFinder 实现, 查询上比SQL更加面向对象。
实体建模
将实体的职责分离到不同限定场景 bounded contexts,比如订单中有OrderItemId, OrderId, ProductId 和 Qty,这是合乎逻辑的最初订单,后来有 MinDeliveryQty 和 PendingQty字段,是和订单交货有关,这其实是两个概念,订单和订单的交货,但是我们把这些字段都混合在一个类中了。这就是一件坏事情。
在Qi4j中,不是把实体看成铁板一块,一开始就把它分解到各种场景,下订单和订单交货交付是两个场景,它们应该有彼此独立的接口,由实体来实现,这就能够让实体和很多场景打交道,而彼此不影响,这就是组合模型composite model的一个关键优点。所有这些场景都是有mixin接口实现,在数据库中它们是一个,也就是说,从ER模型上看,它们是一个整体,但是从domain model领域模型角度看,它们是分离的。
看到这里,本人也非常有体会,下面是两张是我本人基于Jdon框架开发JiveJdon
是设计,短消息模型和关注模型有不同的实现之类,在数据库模型中,它们在一张表,但是在业务层领域层,它们是不同的实现,也决定表现层有不同的处理方式。
关系在设计时就被定义
如果你使用key-value 来存储对象,比如在Qi4j中,一旦你设计好实体模型,对象之间的关联关系和属性将自动存储,无需任何配置和设置,这极大地降低需要设计一个实体模型的时间,因为所有的与关系数据库的映射模式和处理开销就消失了。
在Qi4j是没有让实体有递归引用问题, EntityStore 将为你自动处理一切,如果你需要存储复杂的值,那么它们将被序列号成JSON字符串,存储在一个字段中,有人认为领域模型信息将倾向于扩散到整个应用,特别是进入数据库,Qi4j使用entity definition在一个模型中完成全部定义,使用EntityStore 自动保存模型的数据,这样这个扩散问题就迎刃而解。
职责改变
程序员负责模型的改变,而DBA则负责在数据库中实现它,DBA有职责 保持着所有的应用程序访问相同的数据库,并确保他们在被修改后,继续之前的存储轨道。
如果领域模型以key-value驻留在应用中(我的理解就是领域模型保存在内存缓存
中),报告和整合是基于领域模型的事件(在Jdon框架6.1版本中,推出异步
观察者事件,主要就是实现基于领域模型的事件),应用程序将变得更加易于修改,而且不相互影响。
该文作者还对更多数据库概念在Qi4j中处理实现方法做了解释,使用Qi4j数据库自动生成,无需定义Schemas,如果你想直接访问数据,那有多少框架能够方便让你直接访问Key-value中的数据?
关于Joins 和 queries,Key-value存储是不支持的,这里key-value存储主要是指Mongo和Couch之类新式数据库,作者认为他们就不应该支持Joins 和 queries,这些都是业务层来实现,比如使用Qi4j的RDF store,通过和key-value存储结合,可以获得惊人的加载和存储性能,可以使用各种技术优化,这里我理解为使用分布式缓存
如terrracotta来提升性能。
关于Datatypes数据类型,对于Qi4j来说,如果数据库支持 Long or Date类型,就使用,否则就是要String字符串型字段,或者使用base64 encoding序列化保存,有人担心性能,因为有缓存
,第一次加载性能可以忽略不计了。
还有关于key-value不支持Aggregation,作者认为这些和报表有关,而报表是不应该在key-value存储中实现,这是SQL强项。
总结:Qi4j + key-value存储数据库(Mongo和Couch)是一种更加符合DDD
的架构。
原文:http://www.jdon.com/jivejdon/thread/37186
分享到:
相关推荐
【实验四:NoSQL和关系数据库的操作比较】 本实验旨在对比分析四种不同的数据库管理系统:MySQL、HBase、Redis和MongoDB。这些数据库在处理大数据时各有特点,理解它们的概念及不同点是实验的关键。 1. **MySQL**...
nosqlbooster4mongo-4.5.4 NoSQL Manager for MongoDB Pro
四、INetDB:自主研发的NoSQL解决方案 面对Tokyo Tyrant的稳定性风险和功能限制,开发团队决定自主研发NoSQL存储解决方案——INetDB。INetDB不仅兼容Memcached协议,支持主从复制和ttserver复制协议,还具备更高的...
4. **扩展性和可维护性**:Megastore的设计充分考虑了系统的可扩展性和可维护性,能够随着业务的增长而平滑扩展,并通过模块化的设计简化了系统的管理和升级过程。 #### 结论与展望 Megastore的成功实施不仅展示了...
nosqlbooster4mongo-8.1.0
4. **脚本编辑器**:NosqlBooster 4 MongoDB内置了一个代码编辑器,支持MongoDB的Shell命令和JavaScript代码,具有代码高亮、自动补全和错误检查等功能,便于编写和测试脚本。 5. **数据导入导出**:工具提供了数据...
在当今的信息化时代,大数据和NoSQL数据库成为了技术领域中的热门话题。这两个概念不仅改变了我们处理数据的方式,也引领了新一代的数据存储与分析潮流。本文将深入探讨Nosql和大数据的相关知识点,帮助读者理解它们...
4. **数据导入导出**:用户可以轻松地将数据导入到MongoDB或者导出为JSON、CSV或其他格式的文件,这对于数据迁移和备份非常方便。 5. **备份与恢复**:NoSQLBooster支持一键式数据库备份和恢复功能,使得数据安全...
通过本次实验,掌握了关系数据库和NoSQL数据库的操作方法和技术,了解了四种数据库的概念和不同点,熟悉使用了四种数据库操作常用的Shell命令和Java API,提高了数据库设计和开发的能力。 ### 实验总结 本次实验对...
nosqlbooster4mongo-6.1.3.exe
其Enterprise、Standard、Standard Edition One和Express四个版本满足不同规模企业的需求,支持多种操作系统,包括Linux、Windows和Unix。 2. **MySQL**:作为开源数据库,MySQL以其简单易用和高性价比受到广泛欢迎...
B NoSQL数据库PPT全文共20页,当前为第4页。 关系数据库面临的挑战 传库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题统的关系数据,例如: 1、...
### NoSQL误用和常见陷阱分析 #### 一、被误用的NoSQL:循环网络调用 在NoSQL数据库的使用过程中,一种常见的误用是循环网络调用,这通常发生在开发者没有充分利用NoSQL数据库的批量操作能力时。例如,在使用...
log4j-nosql-2.0.2-javadoc.jar, log4j-nosql-2.0.2-sources.jar, log4j-nosql-2.0.2.jar, log4j-over-slf4j-1.5.0.jar, log4j-over-slf4j-1.5.10.jar, log4j-over-slf4j-1.5.3.jar, log4j-over-slf4j-1.5.5.jar, ...
NoSQL是什么? 为什么使用NoSQL? 为什么使用NoSQL? NoSQL的分类 NoSQL有什么特点? NoSQL有什么特点? NoSQL是否完美? NoSQL的一些概念——CAP NoSQL的一些概念——ACID NoSQL的一些概念——BASE NoSQL的一些概念...
总的来说,NosqlBooster 4Mongo是MongoDB开发者和管理员的理想工具,通过提供丰富的功能和便捷的操作界面,使得MongoDB的管理变得更加简单和高效。无论是进行日常的数据操作、性能调试还是团队协作,NosqlBooster都...
#### 四、NoSQL数据库的选择标准 1. **数据模型**:根据应用程序的数据结构和需求选择合适的NoSQL数据库类型。 2. **扩展性**:评估数据库的扩展能力和成本。 3. **一致性需求**:根据业务需求确定是否需要强一致性...
【nosqlbooster4mongo-4.7.4】是一个专为MongoDB设计的免费图形化客户端工具,它为数据库管理员和开发人员提供了一个高效、便捷的界面来管理和操作MongoDB数据库。MongoDB是一款流行的NoSQL数据库系统,以其灵活性、...
MongoDB 4.0 客户端工具NosqlBooster是一款专为MongoDB数据库设计的强大图形用户界面(GUI)工具,适用于管理和操作MongoDB数据库。NosqlBooster提供了直观的界面,使得对MongoDB的数据查询、编辑、管理变得更加便捷...
大数据和NoSql是现代信息技术领域的两个重要概念,它们在处理海量数据和构建高效数据库系统方面发挥着关键作用。本文将深入探讨这两个主题,以及在实际应用中如何利用它们来设计和优化大型互联网企业的架构。 首先...