`
liuhuashan_21
  • 浏览: 5618 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关系数据库性能问题(续)--引用

阅读更多

五 Object Relational Database 和O/R Mapping

主流关系数据库厂商都在产品中加入Object特性,支持用户自定义类型,嵌套表等,称为Object Relational Database。
看到的文章和文档里面说,Object Relational Database只是在Relational Database之上增加了一些更多的复杂类型,而基础的Infrastructure没有太大变化。
Relational Database由于 二维表结构的限制,都是Mainframe方式,无法实现 Database Cluster,支持的并发连接访问量有限,如果要提高容量和性能,只能购买更好的主机硬件。Transaction中Lock的粒度也只能是Table或者Row,不是过大就是过小。不知道是不是这样?
Object Database能够实现Database Cluster,分布式对象缓存也支持得不错。数据量增大,并发连接访问量增大的时候,只要在Database Cluster中增加多台一般的计算机。Transaction中Lock的粒度能够控制的很好,只锁住恰好需要处理的Object和Associated Objects。
Objectivity的文档里面这样说,用户可以事先把需要处理的所有关联的Objects放到一个Container里面,然后锁住这个Container。

对象数据库的Java API一般都号称 遵守ODMG3.0 and/or JDO1.0。开源的Object Database实现和 ODMG 实现,大致看了一眼 Ozone 的相关源码,觉得不错。
ODMG和JDO的目的,是提供一个 对象数据库 和 (关系数据库 + O/R) 无差别的API层。关系数据库的O/R Mapping遵守ODMG和JDO,对象数据库的API也遵守ODMG和JDO。这样,不用管下面用的是什么是数据库,用户都通过ODMG和JDO API,当作 对象数据库来使用。

关系数据库都支持标准SQL,但都提供了自己的native enhanced feature。对象数据库更是如此,API中除了包括ODMG或JDO,额外还提供了很多Native Feature的声明调用。我感觉,使用对象数据库,也许比使用 关系数据库更难移植。不知道是不是这样?
O/R Mapping天生就是用来把 关系数据库 包装成 对象数据库的使用方法的,自然就掩盖了各关系数据库之间的不同。

这里有个wiki page,估计是Hibernate Group的人总结的。列出了几乎所有的O/R Mapping tools的各方面特性的比较。有兴趣的朋友,可以在这个wiki page里面加入自己的作品。

引用

原文
http://c2.com/cgi/wiki?ObjectRelationalToolComparison

This page has been created to compare Java ObjectRelationalMapping layers. This should help potential users to make an educated choice of O/R technology and to better understand the existing products.

 

六 相关资料

 

引用

Service-Architecture在线文章列表
http://www.service-architecture.com/articles/index.html

其中,
These articles provide a basic background on concepts and standards for database management systems (DBMS). Many of these concepts apply to all forms of database management systems: relational (RDBMS), object (ODBMS), XML (XDBMS), and others as well as object-relational mapping and XML-mapping products

 

 

引用

http://www.unixspace.com/context/databases.html

这个很牛。列出来一堆的Database Model.
Hierarchical Model,
Network Model,
Relational Model,
Object/Relational Model,
Object-Oriented Model,
Associative Model,
Entity-Attribute-Value (EAV) data model,

最后提出了自己的作品的Model.
Context Model.
包括了上述所有的Model。

 

 

复杂的sql,性能肯定好不到哪里去。
高性能的系统,要尽可能使用简单的sql。
在一次会话中select很多次,很容易把数据库搞死。递归和循环代码中的查询,一般是要避免的。
基本表映射成一个行的集合,这个集合是Singleton的,并且可以按ID找出行。那么基本表可以不用每次都查询。在基本表集合第一次被请求时查询一次数据库,然后就保存在内存中。当基本表改变的时候,刷新基本表行的集合。
业务表映射成业务对象。业务对象中引用基本表的对象的时候,到基本表集合中去找,而不是去查数据库。这样应该可以避免join或者循环的select了。join也是比较消耗服务器资源的,特别是join的表比较多和层次比较深的情况。
大致是这样的

代码
  1. class BaseObj{   
  2. int getId();   
  3. ...   
  4. }   
  5. //这个Collection最好自己实现,提高性能,避免在查找中遍历集合   
  6. class BaseObjectList{   
  7. BaseObj findById(int id);   
  8. static getInstance();   
  9. }   
  10. class BusinessObject{   
  11. ...   
  12. int baseObjId;   
  13. BaseObj getBaseObj(){   
  14. [b]return BaseObjectList.getInstance().findById(baseObjId);[/b]   
  15. }   
  16. }   

<script>render_code();</script>
对于大表Join小表的情况,提高性能解决方法就是把小表始终放到内存里。

分享到:
评论

相关推荐

    记录一下曾经写过的P2P金融项目-理财端(PC端)纯代码(续-服务消费者工程)

    - 关系型数据库如MySQL存储用户信息、交易记录等结构化数据。 - NoSQL数据库如MongoDB可能用于存储非结构化数据,如用户行为日志。 7. **测试与监控**: - 单元测试、集成测试确保代码质量,JUnit和Mockito是...

    Android校招面试指南 2018最新版本

    - **Android性能优化总结**:提高应用程序性能的各种技巧。 - **Android内存泄漏总结**:常见内存泄漏的原因及解决方案。 - **Android布局优化之include、merge、ViewStub的使用**:提高布局渲染效率的方法。 - **...

    新闻发布系统

    SmartUpload是一个常用的Java上传组件,它能够处理大文件上传、断点续传等问题。在服务器端,系统会将图片保存到指定的目录,并生成对应的URL,供新闻内容引用。 三、新闻发布模块 新闻发布系统的核心是新闻内容的...

    2021-2022计算机二级等级考试试题及答案No.12544.docx

    在数据库设计中,外关键字(Foreign Key)是关系中非主键属性,但它是另一个关系的关键字。 消除查询结果集重复值,可以使用DISTINCT关键字。 计算机病毒中确实存在一些良性病毒,它们可能不破坏数据,但可能会...

    汪文君高并发编程实战视频资源全集

     高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4  高并发编程第三阶段13讲 一个JNI程序的编写,通过Java去调用C,C++程序.mp4  高并发编程第三阶段14讲 Unsafe中的方法使用,一半是...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4  高并发编程第三阶段13讲 一个JNI程序的编写,通过Java去调用C,C++程序.mp4  高并发编程第三阶段14讲 Unsafe中的方法使用,一半是...

    学生宿舍管理系统_需求分析.pdf

    同时,文档中还列举了可能使用的专业术语和缩略语,以及引用的相关文件,以便于读者查阅和理解。 2. 项目概述 2.1 目标 学生宿舍管理系统的目标是提高宿舍管理的效率,减少人为错误,提供实时的住宿信息查询,实现...

    android视频教程部分源码

    Android提供了HttpURLConnection或者第三方库如Volley、OkHttp等进行网络请求,下载文件时需要处理线程安全、文件保存路径、断点续传等问题。 3. **xml**: Android中XML文件主要用于布局设计和资源管理。可能包含了...

    Informatica PowerCenter V7.1.2功能特性介绍

    2. 定义两个 **Mapping** 分别引用该组件。 3. 针对每个Mapping创建两个 **Session** 并行运行。 #### 3. 读取 VSAM (COBOL) 源文件 **VSAM (COBOL)** 文件通常用于大型机环境中,Informatica PowerCenter V7.1.2...

    Android 面试精华题目总结

    以上只是Android面试中的一部分常见问题,全面的准备还需要涵盖Android组件(Activity、Service、BroadcastReceiver、ContentProvider等)、多线程、网络编程、UI设计原则、权限管理、性能优化等多个方面。...

Global site tag (gtag.js) - Google Analytics