免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8001 | 回复: 11
打印 上一主题 下一主题

[C] 关于内存数据库与实时数据库的区别?请大神们参与讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-16 23:07 |只看该作者 |倒序浏览
最近在研究实时数据库,但是我还是没有分清楚实时库与内存数据库之间的区别。为什么要研究实时库,因为同样一份数据,我要实现多个进程同时对它的进行访问。所以这个必须用到实时库,而实时库又只有一份,不知道怎么实现。
我个人的理解实时数据库如下:
就好似我们在写C/C++时会定义与核心进程相关的一些.h(头)文件,在编译时,.h和.C/.cpp都会一起同时被编译,生成可执行文件或动态链接文件。
那我们通常讲的实时库,是不是就是类似的.h文件,他们就是实时库的实体文件,再启动系统或平台时,这些文件就会加载到内存中,或者是.h关联的进程启动时,进程对应的.h实体文件就被加载到内存,当另外的进程启动时,操作系统或平台会检测内存中是否已有一份.h映射的内存空间,如果有就不在加载了。最后,各个不同的进程都可以同时访问内存中的这一份.h文件映射出的内存空间中的数据。

注意:我是非计算机专业,所以问题很菜鸟,请大家谅解。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
2 [报告]
发表于 2014-01-17 08:46 |只看该作者
lz这是在说些什么啊?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
3 [报告]
发表于 2014-01-17 09:36 |只看该作者
楼主应该先了解实时操作系统的特点,可能对实时数据库的理解有帮助。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2014-01-17 09:46 |只看该作者
回复 1# da888888


    你这不做类比还好,一类比,直接就不知所云了。

论坛徽章:
2
2015年亚洲杯之乌兹别克斯坦
日期:2015-04-15 15:43:482015亚冠之迪拜阿赫利
日期:2015-06-30 20:36:46
5 [报告]
发表于 2014-01-17 10:05 |只看该作者
反正我的理解就是共享数据而已,做好同步就是了。

论坛徽章:
0
6 [报告]
发表于 2014-01-17 10:13 |只看该作者
谢谢!我可能说得太混乱了,因为我现在理解非常模糊,这样描述吧:
实时库都存在自己的实体文件吧,这个实体文件是存在磁盘上的吧,这些实体文件怎么映射到内存的,又是怎么提供服务让多个进程同时访问这个内存映射区间(这个区间貌似就是实时库),系统是怎么管理的呢?

PS:我用百度看了一些说明,都觉得不是很理解,计算机基础太差,比如win32下每个进程都分配了4G的虚拟内存空间,然后按页目录、页进行管理,然后就不是很明白了

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
7 [报告]
发表于 2014-01-17 11:03 |只看该作者
不觉明厉啊,等大神们讨论

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
8 [报告]
发表于 2014-01-17 11:21 |只看该作者
实时数据库 未必就一定是 内存数据库;
内存数据库 未必就一定是 实时数据库。
实时和非实时 是需求上的概念,内存和非内存 是实现上的概念。

实时数据库 和 非实时数据库 的本质差别是:对于插入操作,实时数据库 要求在指定时间内完成,而 非实时数据库 则无此要求。

实时数据库 和 非实时数据库 的差别:
a. 一般而言,实时数据库 会比 非实时数据库 插入操作耗时少,但这却未必绝对。
b. 一般而言,实时数据库 会带有 内存数据库 模块,但这却未必绝对。
c. 一般而言,实时数据库 不提供SQL操作,以保证各项操作的效率,但这却未必绝对。
d. 一般而言,实时数据库 会使用压缩技术,从而导致历史数据精度丧失,但这却未必绝对。
e. 一般而言,实时数据库 会使用压缩技术,以减缓其物理存储的膨胀,但这却未必绝对。
f. 一般而言,实时数据库 会带有 内存数据库 模块。当突然掉电时,近期的数据会丢失,但这却未必绝对。
……一时想不出来……

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
9 [报告]
发表于 2014-01-17 13:16 |只看该作者
顶楼上的,楼主的问题和楼上的回答都没看懂。

论坛徽章:
0
10 [报告]
发表于 2014-01-17 13:20 |只看该作者
回复 8# bruceteen
感谢你的回复。。。说得非常清楚。。。
还有几个问题请继续讨论:关于实时数据库本质我想更深入的了解
   实时数据库其实都有自己的一份实体文件,该实体文件是保存在物理磁盘当中,即可长期保存。基于此,结合您的6点回答,继续提问:
   a. 实时数据库因为都是在内存中直接操作,不涉及打开文件或加载文件到内存的过程,所以一般而言他的速度非常快,但由于实时数据库也会将内存数据同步写到磁盘上对应的实时库实体
      文件,所以它有时的操作可能也会因I/O操作出现延时,所以您说“未必绝对”,是这样理解么?
   b. 从你的解释来看,实时库与内存库的关系可以说是:内存数据库是一种实现实时数据库的方式或技术,对吗?除此之外,还有其它技术也可以实现实时数据库的需求,比如共享内存?比
      如。。。。。。
   c. 实时数据库不提供SQL查询,我觉得实时数据库应该会提供一个对外(对第三方的查询工具或访问工具),SQL即使一种,为什么会影响效率呢?因为查询可以在实现封装成一个函数接
      口,这个接口对数据的其它查询为什么会有影响?
   d. 不懂
    f.  不懂
    e. 这一点说得非常对,按照我理解实时库有自己的实体文件,如果掉电,内存中的数据消失,但是由于实时库会同步更新磁盘上的实体文件,从而会在实体文件保存掉电前的一次数据,所以近期数据未必丢失,当然这是不是依赖于数据库设计时要具备从内存同步更新实体文件的需求?
   
其它问题:   
1、实时库还有具有被多用户并发访问的功能,由于我的实时数据库在内存中肯定只有一份,那么我的多个应用程序怎么并发访问呢?当然开多个实时库实例是一种方法,但是肯定又消耗内
   存了,所以在实时库设计时,是不是要用到队列的技术,失效,锁等技术实现并发访问?
2、实时库启动与应用程序启动间的关联关系?
   我的理解:操作系统启动后,我们输入启动我们自己应用系统的功能,这个应用的功能启动就包括我们系统平台的启动和应用进程的启动,平台的启动就涉及到实时库的启动,那实时怎么启动的呀?肯定有一个程序来启动这个实时库?这个程序是什么,是DBMS(数据库管理程序)吗?还是?那这个数据库启动程序要干些什么事情呢?首先是将实时库的实体文件加载到内存中,将数据库的内容在内存中进行实例化,启动所有的数据访问接口(相当于就是一个个动态链接文件),主要就是两个。
   待实时数据库启动后,再启动我的进程,这样进程感觉就是透明的访问实时数据库了。应用进程通过自己的调用的数据库接口函数方式对数据进行
   上面是我个人的一些理解,请大神赐教!小弟不甚感激呀!




   


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP