最近有消息说韩国电信已经在新的3G 的BSS系统中开始使用内存数据库,而且还是基于对象的内存数据库,这个消息对于一直在做电信系统开发的我来说很是让我浮想联翩,很早前就想对一些老系统用ORM做一次重构了,但是因为种种原因和ORM的种种局限而未能最终走出这一步,对象化内存数据库的实用化让我看到了希望的曙光。
其实也不能说电信系统里就没有使用ORM的例子,其实很多系统已经在使用Hibernate了,不过很可惜的是,在很大一段时间内国内做.NET开发的人们都是处于邯郸学步的状态,JAVA里有了个Hibernate,于是有了NHibernate。拿来主义固然好,但是再好的框架也有遇到中国国情的时候(微软和中国果然很有缘份)。很多时候做.NET的人都有点对java有说不出的感觉,总觉得自己先进,但是每每看到用java的大型系统(特别是电信领域)的时候,总是存在很复杂的表情。可能是叫自惭形秽,因为我也是学.NET出身,又是在电信行业的环境内,所以感觉特别强烈,不过也不用妄自菲薄,电信里面也是有.NET一席之地的。
这里回到问题本身,为什么不用ORM?这里已开始我主要考虑的就是效率问题。现在的ORM框架基本原理无外乎都是通过万能的反射来实现映射的目的。不过众所周知的,反射就意味着百倍的性能下降(关于反射的效率问题网上文章多多,不再累述,前段时间和徐晓卓谈到这个问题的时候也是这个结论),还有一点就是成倍的增加了Call stack的长度,这个也是不小的开销。总之在这个时候,强调实时性的电信系统也别是VNET的计费系统在使用的时候不得不面对这个严峻的问题。第二点也是很多人想反驳我的观点的地方,很多ORM框架,比如NHibernate,iBaties.NET等都有缓存机制,也有的有LazyLoading,何来效率问题?这里强调一下,这两个框架的源码我没看完过,用法也不精通,所以说错了希望有大大出来纠正我,根据我现有有限的智慧发现,LazyLoading的效率问题依然严峻,因为就算是延迟了加载,但是总归是会加载的,当一个类的成员列表的长度达到几十万,或者上百万的级别的时候,你会发现,貌似一开始就加载和调用时加载没什么区别,而且就我有限的智慧发现这样子调用是无法对子列表进行分页处理的。老一辈无产阶级革命的程序员教导我们,读取大列表一定要分页,这里我们不得不违背了这个原则,但是就算是有缓存也不是万能膏药,举个实际的例子,一个大数据库的用户表数据量高达100W数量级,包括各类用户等等,100W的数据要占用1个多G的空间。这个时候我只能傻眼了(iBaties.NET对查询作缓存,空间浪费更加严重),一般的WEB服务器上只有2G的内存。
虽然说这是个硬件贬值比工资贬值都快的年代,但是在WEB Server用Cache未免开销过大,大型系统最小部署就需要4台PCServer做群集。同时升级4台Server的内存是用户所不能接受的。
这时候该我的救星,内存数据库粉墨登场拉,不过现在还只是在我的想象之中,最终的效果可能暂时还不会真正的使用
在我的设想中最终存储数据的还是物理磁盘作为最终的载体,不过所有的业务数据都由内存数据库Cache起来,对于用户的输入能够最快的作出反应,并且通过刷新机制,根据策略把数据永久性的写入磁盘,在这里比如用户数据,订购元数据,当月订购关系,当月详单全部load进内存,所有业务都在内存中展开,账期结束的时候再写入物理磁盘永久保存,如果中途掉电通还可以通过日志和物理磁盘里上次提交结果来恢复。这样子把这个内存数据库部署在两台接口机上,配制成群集,这个时候就只需要升级两台Server的内存就能满足目标了。
分享到:
相关推荐
4. **映射元数据**:这是定义对象和数据库表之间关系的描述,可以是XML文件或注解形式。映射元数据包含了字段映射、主键设置、关联关系等信息。 5. **动态SQL**:自定义框架可能提供一种方式来生成动态SQL,使得在...
ORM(Object-Relational Mapping,对象关系映射)框架是一种软件技术,用于将关系数据库的数据映射到对象上,使得开发者可以使用面向对象的方式来处理数据库操作,而无需直接编写SQL语句。ORM框架的主要目标是简化...
在本项目中,我们主要探讨的是一个基于Python的酒店管理系统,该系统采用了现代Web开发框架FastAPI以及关系型数据库MySQL,并且利用了Tortoise-ORM进行数据操作。以下是关于这些关键技术点的详细说明。 首先,...
ORM技术的引入,极大地提高了开发效率,特别是在大型项目中,当数据库结构复杂、业务逻辑繁多时,ORM可以实现数据库操作的抽象化和自动化,使得程序员可以专注于业务逻辑的实现,而不是繁琐的数据库交互。ORM框架...
**基于ORM的数据库框架Room** 在Android开发中,数据存储是一个关键部分,而Room数据库框架是Google官方推荐的用于Android应用程序的数据持久化解决方案。Room基于对象关系映射(ORM)理念,它允许开发者以更面向...
为了简化这一过程,Object-Relational Mapping(ORM)技术应运而生,它允许开发者以面向对象的方式来操作数据库,提高了开发效率和代码的可读性。本篇将深入探讨Android中ORM数据库的使用,特别是以ActiveAndroid为...
用对象关系映射的方式来查询数据库数据,让使用者更加方便,减少代码冗余
1. **改进ORM技术的运用**:首先,通过优化的ORM技术来访问多种来源和结构的Oracle数据库,从这些数据库中抽取所需的数据资源。ORM技术允许程序与数据库之间的交互更加灵活,减少对底层数据库结构的依赖,提高跨...
本项目“c#自定义ORM链接SQLite数据库增删改查”是基于Dapper库进行扩展,通过Dapper-Plus进一步封装,以实现对SQLite数据库的自动化SQL生成和执行,简化了开发中的数据操作流程。 首先,Dapper是一个轻量级的ORM库...
This project is based on Java, is a lightweight ORM model. Only concerned about the Object-Relationl Mapping, therefore more simple and easier to use, easier to control. Key support functions and ...
Chloe ORM(对象关系映射框架)支持多种数据库管理系统(DBMS),如Oracle、SQL Server、MySQL和SQLite,允许开发者在不同的数据库平台之间切换,而不需要改变底层代码。这一功能主要是通过配置文件来实现的,本文将...
本项目为一个简单的JDBC项目,包括:MySQL数据库在idea中的增删改查,JDBC简化,JDBC工具类封装,orm模式,数据库三层架构,JDBC事务 新建一个ProductManager的项目,实现利用ORM思想和三层架构以下功能: t_product...
DataDogAuditBundle, 存储 Doctrine ORM的所有数据库更改 审计包这个包为所有 Doctrine ORM数据库相关更改创建审核日志:插入和更新包括它们的差异和关系字段差异。许多到许多关系变化,关联和分离动作。如果有用户...
ORM(Object-Relational Mapping)是Beego框架中的一个重要组成部分,用于简化数据库操作,将数据库表映射为Go语言的结构体,从而实现面向对象的数据库访问。 在Go语言中使用Beego的ORM,首先需要进行基础的配置,...
3. **映射文件或注解(Mapping File/Annotations)**:定义实体类和数据库表之间的映射关系,如字段名、类型等。 4. **会话(Session)**:负责管理对象的状态,通常用于保存和加载对象到数据库。 5. **查询接口...
不过,ORM框架可能会增加应用的内存消耗和运行时开销。 然后,SharedPreferences是Android提供的另一种简单持久化机制,主要用来存储轻量级的键值对数据,如用户偏好设置。它基于XML文件存储,易于读写,适合保存...
总之,这款DELPHI ORM类设计工具通过提供可视化的类图设计和自动生成的BPL插件,极大地优化了DELPHI开发过程中的数据库交互,提升了开发效率和代码质量。对于任何DELPHI项目,尤其是那些涉及大量数据库操作的应用...
在“Django项目orm操作mysql数据库的项目源码”中,我们可以看到两个关键文件:`day62课上笔记.txt`和`mysiteday62`。`day62课上笔记.txt`可能是课程或讲解的文本记录,详细介绍了如何在Django项目中使用ORM与MySQL...
在Spring框架中,数据库访问是核心功能之一,而ORM(对象关系映射)技术则是连接业务逻辑和数据存储的关键桥梁。本篇文章将深入探讨Spring如何实现ORM,主要以JPA(Java Persistence API)和Hibernate为例,同时也会...
最最最最最最基础的操作数据库增删改查,支持事务,通用类,理论上支持MsSql,Oracle,OleDb,MySql,Sqlite等。(由于后两种需要额外引入相关Dll,因此本类中不包含实现,自己添加即可。) 本类只是提供一种思路,...