java多用户同时访问和数据库进行交互,如何能够高并发

java多用户同时访问和数据库进行交互,如何能够高并发,第1张

我觉得1万的数据并发量并不大,想oracle数据库,mysql承载这些并发是没有问题的

我觉得,主要的问题在于你GPS是一直在修改的,因为车辆在不断的行驶,这样的话,可能会影响数据库的性能

我觉得,你可以用一个内存行的数据库,比如,redis,用这个来存放GPS信息,redis是基于内存的,读写要比关系数据库速度快(忽略网络因素),你可能要问GPS入库怎么弄,可以做一个定时任务,每隔多少时间来将redis的数据写入到数据库中,当然,redis也支持一些算法,比如LRU,来设置何时将数据同步到数据库

内存数据库数据结构分析

按照目前内存芯片密度每年2倍的增长速度,在未来10年中,配置1 G或更大的内存将是很平常的事。内存容量的快速增长对数据库管理系统有着深刻的影响。在某些场合,将整个数据库放进内存是可能的,正常的查询处理可以完全脱离硬盘。另外,和传统的数据库应用相比,有大量的新兴应用,目前的内存大小已经足够了。

在数据库系统中,有2种方法来使用大量的内存。

(1)增大缓冲池 将一个事务所涉及的数据都放在缓冲池中。当采取这种方法的时候,算法优化的目标仍然是最小化磁盘访问。

(2)常驻内存数据库 将整个数据库放进内存中。 这种方法需要重新设计一种数据库管理系统,需要对查询处理、并发控制与恢复的算法和数据结构进行重新设计,以更有效地使用CPU周期和内存。

1 磁盘和内存

内存数据库的索引结构和基于磁盘系统的索引结构不同,面向磁盘的索引结构的目标是最小化磁盘访问次数和空间占用,而面向内存的索引结构全部放在内存中,因此没有磁盘访问次数的最小化。这样,内存索引的目标是减少整体的计算时间同时尽可能少地占用内存。由于关系常驻内存,在索引中没有必要存储真实的属性值,而存储指向元组的指针,当需要的时候通过这些指针能够得到属性值。这样做有4个优点:

(1)单一元组指针便能访问元组的属性和元组本身,这就减少了索引的大小。

(2)避免了处理在索引中的长字段、可变长字段以及压缩技术。

(3)当更新索引 *** 作时,移动指针将比移动属性值更廉价。

(4)由于单个元组指针提供访问这个元组中的任何字段,采用一种特殊的机制多属性索引的需要将减少。

2 物理组织方法

内存数据库的总体设计目标是使内存和CPU的利用率尽可能高,而内存数据库的物理组织是实现该目标的基础,其存储结构、索引结构、中间数据存储结构都必须考虑内存的直接存取这一特征,这里介绍几种适合于内存数据库的物理组织方法。

21 区-段式

区-段式组织是基于关系数据模型的。他将存储空间逻辑划分为“分区”,每一个分区存储一个关系。由若干“段”组成,一个段是内存中固定长度的连续区域,相当于“页”,但比页大,是内外存I/O的单位,也是内存空间分配以及内存数据库恢复的单位

 一个段中的一个数据记录就是一个关系元组。每个记录有一个惟一的标识符RID(Record Identifier),他是一个三元组<P,S,L>,其中P,S,L分别为分区号、段号、段内的记录槽号,记录槽(RecordSlots)包含了对应记录的长度和记录的首地址。这样由RID经分区表和相对应的段表找到相对应的记录槽,按槽中的地址和长度便可直接存取所要的记录。其实,对于内存数据库,存取方法返回的不必是所需的记录数据的副本,只需将其槽中的地址返回即可。

2.2 影子内存式

按影子内存式组织的内存数据库空间可以划分为2部分:一部分是MMDB的主拷贝;另一部分为“影子拷贝”。

在事务的正常 *** 作期间,每次查询都产生一个分别对于影子内存SM(ShadowMemory)和主拷贝PDB(Primary DataBase)的双地址,且总是先对SM试探,若不成功,再对PDB *** 作。所有的更新 *** 作都在SM中进行,且都记录在活动日志中(Active Log)。每当一个事务提交时,由他所产生的在SM中的“后映像”拷贝到PDB中。使用影子内存的优点是:

(1)减少了日志缓冲区,因为其后映像区和用户区合二为一。

(2)省去因事务失败或系统故障时的UNDO *** 作,只清除相应的影子内存即可。

(3)减少对MMDB(PDB)存取,各事务可并行对各SM区 *** 作。

(4)缩短恢复过程,这是因为一方面如(2)所述,省去UNDO型 *** 作,只需做REDO型 *** 作;另一方面还可以就当前事务对SM做“部分恢复”以后,就先启动正常事务处理,然后按需要逐步恢复PDB。

影子内存式和区-段式可以组合使用

mongodb和memcached不是一个范畴内的东西。mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据。mongodb和memcached不存在谁替换谁的问题。 和memcached更为接近的是redis。它们都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。在我们团队的项目中,一开始用的是memcached,后来用redis替代。 相比memcached: 1、redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上。 2、redis具备binlog功能,可以将所有 *** 作写入日志,当redis出现故障,可依照binlog进行数据恢复。 3、redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则通过类似LRU的算法把内存中的最不常用数据保存到硬盘的页面文件中。 4、redis原生支持的数据类型更多,使用的想象空间更大。 5、前面有位朋友所提及的一致性哈希,用在redis的sharding中,一般是在负载非常高需要水平扩展时使用。我们还没有用到这方面的功能,一般的项目,单机足够支撑并发了。redis 30将推出cluster,功能更加强大。 6、redis更多优点,请移步官方网站查询。

1,首先内存不是共享的,一个用户拥有自己独立的一块内存,在一般情况下,别的程序是无法查看的因此没有什么并发的问题,我是这么理解你的意思的

2,缓存而已,一个用户搜到了100条数据,这100条数据放在dataset中,如果还需要此数据,直接从dataset中取,不需要连接数据库了

// 数据库才要考虑并发,dataset只是缓存,它是当前用户内存中模拟的数据库,不是真正的数据库,它本身没有处理数据的能力

3,都是服务器控件,没啥大的区别,aspnet服务器控件的存在意义就是跟C#完美结合,快速敏捷开发web项目;html服务器控件存在的意义就是,html本身的那些控件,可以让你在服务器端进行处理了,两者都是服务器端处理,所以除了内部机制稍有不同,没有区别

=====================

我听你的意思还想在数据库中的数据更改后通知dataset?这显然是不可能的,因为连接已经断开了,数据库怎么通知你的程序?要想维持dataset 的数据是最新的, 就应该每隔一段时间(5分钟什么的)访问一次数据库,来保证你的数据是最新的。

如果你说你不让连接断开,这显然是不对的程序设计,因为数据库连接是有限的,你不放开连接,别人怎么用?

问题一:内存数据库主流的有哪些,并给出各自特点! 这里介绍一些大型的市场占有率比较高的内存数据库,也是业界响当当的―SAP HANA、Oracle Exalytics、Orale TimesTen、IBM SolidDB,可以说他们之间没有说是哪个最好,主要还是看使用的场景和具体的需求,各自特点如下:

SAP HANA(High-Performance Analytic Appliance)是 SAP 公司于 2011 年推出的基于 内存计算技术,面向企业分析性应用的产品。左图 的系统架构示意图中可以看出, HANA 产品主要包括内存计算引擎和 HANA 建模工具两部分。它支持从 SAP 商务套件中 同步更新业务数据,或者从 SAP BW(SAP 商务智能产品)和其他第三方数据源中批量导 入数据,在 HANA 中进行运算后,提供给 SAP BI 客户端或者其他第三方展现工具进行分 析和展现。

Oracle Exalytics 内存分析一体机是面向分析的集成设计系统,可以无限制提供最佳可 视化分析和更智能的分析应用程序。 如图 所示, Oracle Exalytics 内存分析一体机的产品架构包括 3 个部分: 内容分析 硬件、内存分析软件和经过优化的 Oracle 商务智能基础套件(Oracle BI Foundation)。内存分析硬件部分是一台为基于内存计算的商务智能而特别优化的服务器,具有提供 强劲计算能力的 40 核中央处理器,高达 1TB 的内存以及快速的网络 内存分析软件部分的核心是 Oracle TimesTen 内存数据库。它是为 Exalytics 平台而特 别优化的内存分析数据库,包括了很多 Oracle Exalytics 平台特有的功能。Oracle 商务智能基础套件部分受益于 Oracle Exalytics 内存分析一体机的大容量内存、 处理器、并发处理能力、存储、网络、 *** 作系统、内核和系统配置等,可以提供明显优于传统软件的查询响应性、用户可用性和 TCO。

Oracle 内存数据库TimesTen 是一个基于内存计算的关系数据库, 提供了响应时间极 短且吞吐量极高的应用程序,可满足各行业应用程序的需求。 TimesTen 是一个可嵌入到应用程序中的数据库, 通过消除进程间通信和网络 开销,进一步提高数据库 *** 作的性能。Oracle 内 存 数 据 库 TimesTen 使 用 行 级 锁 定 和 提 交 后 读 取 (mitted-read) 隔离,通过事务日志记录与数据库检查点相结合实现了基于磁盘的持久 性和可恢复性。TimesTen 通常与多用户和多线程应用程序一起部署,应用程序直接通过 JDBC、 ODBC、 Oracle 调用接口、 ProC/C++ 和Oracle PL/SQL 编程接口, 使用标准SQL 访问TimesTen 数据库。若运行在不同服务器上的多个应用程序共享一个数据库时,则使 用常规的客户端/服务器访问方式。

IBM solidDB 是一个内存数据库,专为获取极高的速度和可用性而进行优化。如图 所示,IBM solidDB 既可以单独部署作为独立的数据库支持应用程序,也可 以部署为其他关系型数据库的加速缓存以提高应用程序性能。solidDB Universal Cache 功能将这些数据库中存储的性能关键型数据 缓存到solidDB Universal Cache 中,加快领先关系数据库的速度。solidDB Universal Cache 功能使用检查点和事务日志将数据持久保存在 磁盘上>>

问题二:开源的内存数据库都有哪些 1最简单的方法:

public static String reverse1(String str)

{

return new StringBuffer(str)reverse()toString();

}

2最常用的方法:

public static String reverse3(String s)

{

char[] array = stoCharArray();

String reverse = ; 注意这是空串,不是null

for (int i = arraylength - 1; i >= 0; i--)

reverse += array[i];

return reverse;

}

问题三:开源内存数据库有几种啊? 常见的有FastDB、SQLite、Berkeley DB、GigaBASE,H2等

问题四:几种常用的开源内存数据库性能比较 本人理解:orcal速度快但是维护不方便吗,费钱。mysql速度可以,维护方便,交orcal来说易上手。db2:大

问题五:开源的内存数据库有哪些支持SQL基准 选择数据库实例―右键属性―选择内存选择页―修改内存―确定

问题六:C/C++开发的开源的分布式内存数据库有哪些 1最简单的方法:

public static String reverse1(String str)

{

return new StringBuffer(str)reverse()toString();

}

2最常用的方法:

public static String reverse3(String s)

{

char[] array = stoCharArray();

String reverse = ; 注意这是空串,不是null

for (int i = arraylength - 1; i >= 0; i--)

reverse += array[i];

return reverse;

}

问题七:哪位达人用过关系型的内存数据库而且是开源的 关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。表与表之间的数据记录有关系。用户用查询(Query)来检索数据库中的数据。一个Query是一个用于指定数据库中行和列的SELECT语句。关系型数据库通常包含下列组件: 客户端应用程序(Client) 数据库服务器(Server) Structured Query Language(SQL)Client端和Server端的桥梁,Client用SQL来向Server端发送请求,Server返回Client端要求的结果。现在流行的大型关系型数据库有IBM DB2、Oracle、SQL Server、SyBase、Informix、access、foxpro等。

问题八:C/C++开发的开源的分布式内存数据库有哪些 1最简单的方法:public static String reverse1(String str){ return new StringBuffer(str)reverse()toString();}2最常用的方法:public static String reverse3(String s) { char[] array = stoCharArray(); String reverse = ; 注意这是空串,不是null for (int i = arraylength - 1; i >= 0; i--) reverse += array[i]; return reverse; } 3常用方法的变形: public static String reverse2(String s){ int length = slength(); String reverse = ; 注意这是空串,不是null for (int i = 0; i 问题九:要求实时数据需要存储到内存库 有开源内存数据库吗 朋友您好,很高兴为您解答问题

请把问题补充完整

大家才能给你提供完善的建议

相信您在知道这个平台

一定会有满意的收获

真诚希望能够帮助您,如果,祝您好运常伴。

问题十:什么情况下用内存数据库 相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘 问能够极大地提高应用的性能。同时,内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行 *** 作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。内存数据库的最大特点是其主拷贝或工作版本 常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。显然,它要求较大的内存量,但并非任何时刻整个数据库都存放在内存,即内存数据库系统还是要处理I/O。

内存数据库是以牺牲内存资源为代价换取数据处理实时性的,内存数据库和磁盘数据库都是当今信息社会里每个企业所必须的关系型数据库产品,磁盘数据库解决的是大容量存储和数据分析问题,而内存数据库解决的是实时处理和高并发问题。两者的存在是相辅相成的,内存数据库的事务实时处理性能要远强于磁盘数据库。但是相对的,他的数据安全方面还没有达到磁盘数据库比肩的地步。

内存数据库将物理内存作为数据的第一存储介质,而将磁盘作为备份。随着电信业务的发展,系统对实时性的要求和对业务灵活修改的要求非常高,在此种情况下对于内存数据库的需求也越来越高。磁盘数据库的做法是将数据存入内存中进行处理,这种方式的可管理性及数据安全可靠性都没有保障。而内存数据库正是针对这一弱点进行了改进。

实际上,内存数据库并不是一项时髦技术,其出现于上世纪60年代末,但由于市场的需求原因在90年代后期才开始发展。作为新一代数据库,Altibase产品已经走向混合型数据库,其版本Altibase 40已经有一套自带的磁盘数据库,用户一旦购买了Altibase的内存数据库,就无须再购买磁盘数据库。它把热数据(经常被使用的、访问比较高的、经常要运算的数据)放在内存数据库里,而把历史性数据放在磁盘数据库里,可为用户进一步减少投资。

对于内存数据库而言,可以将同样数据库的部分内容存放于磁盘上,而另一部分存放于内存中。用户可以选择将数据存储在内存表中以提供即时的数据访问。若访问时间不紧急或数据存于内存中所占空间过大时,用户可将这些数据存入磁盘表中。

比如,在手机用户开始拔打电话时,如果应用基于内存数据库技术的混合数据管理引擎,就通过内存表检索其服务选项并立即验证用户身份,而将通话清单和计费清单归档到磁盘表中。从而,达到了速度与资源使用的平衡。

内存数据库的技术,一个很重要的特点,是可以对内存中的数据实现全事务处理,这是仅仅把数据以数组等形式放在内存中完全不同的。并且,内存数据库是与应用无关的,显然这种体系结构具有其合理性。内存引擎可以实现查询与存档功能使用的是完全相同的数据库,同时内存表与磁盘表也使用的是完全相同的存取方法。存储的选择,对于应用开发者而言是完全透明的。

对于内存数据库而言,实现了数据在内存中的管理,而不仅仅是作为数据库的缓存。不像其它将磁盘数据块缓存到主存中的数据库,内存数据库的内存引擎使用了为随机访问内存而特别设计的数据结构和算法,这种设计使其避免了因使用排序命令而经常破坏缓存数据库性能的问题。通过内存数据库,减少了磁盘I/O,能够达到了以磁盘I/O 为主的传统数据库无法与其相比拟的处理速度。

因此,内存数据库技术的应用,可以大大提高数据库的速度,这对于需要高速反应的数据库应用,如电信、金融等提供了有力支撑。

由于把大多数数据都放在内存中进行 *** 作,使得内存数据库有着比磁盘数据库高得多的性能表现,这一>>

相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。同时,内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行 *** 作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。内存数据库的最大特点是其"主拷贝"或"工作版本" 常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。显然,它要求较大的内存量,但并非任何时刻整个数据库都存放在内存,即内存数据库系统还是要处理I/O。

内存数据库是以牺牲内存资源为代价换取数据处理实时性的,内存数据库和磁盘数据库都是当今信息社会里每个企业所必须的关系型数据库产品,磁盘数据库解决的是大容量存储和数据分析问题,而内存数据库解决的是实时处理和高并发问题。两者的存在是相辅相成的,内存数据库的事务实时处理性能要远强于磁盘数据库。但是相对的,他的数据安全方面还没有达到磁盘数据库比肩的地步。

内存数据库将物理内存作为数据的第一存储介质,而将磁盘作为备份。随着电信业务的发展,系统对实时性的要求和对业务灵活修改的要求非常高,在此种情况下对于内存数据库的需求也越来越高。磁盘数据库的做法是将数据存入内存中进行处理,这种方式的可管理性及数据安全可靠性都没有保障。而内存数据库正是针对这一弱点进行了改进。

实际上,内存数据库并不是一项时髦技术,其出现于上世纪60年代末,但由于市场的需求原因在90年代后期才开始发展。作为新一代数据库,Altibase产品已经走向混合型数据库,其版本Altibase 40已经有一套自带的磁盘数据库,用户一旦购买了Altibase的内存数据库,就无须再购买磁盘数据库。它把热数据(经常被使用的、访问比较高的、经常要运算的数据)放在内存数据库里,而把历史性数据放在磁盘数据库里,可为用户进一步减少投资。

对于内存数据库而言,可以将同样数据库的部分内容存放于磁盘上,而另一部分存放于内存中。用户可以选择将数据存储在内存表中以提供即时的数据访问。若访问时间不紧急或数据存于内存中所占空间过大时,用户可将这些数据存入磁盘表中。

比如,在手机用户开始拔打电话时,如果应用基于内存数据库技术的混合数据管理引擎,就通过内存表检索其服务选项并立即验证用户身份,而将通话清单和计费清单归档到磁盘表中。从而,达到了速度与资源使用的平衡。

内存数据库的技术,一个很重要的特点,是可以对内存中的数据实现全事务处理,这是仅仅把数据以数组等形式放在内存中完全不同的。并且,内存数据库是与应用无关的,显然这种体系结构具有其合理性。内存引擎可以实现查询与存档功能使用的是完全相同的数据库,同时内存表与磁盘表也使用的是完全相同的存取方法。存储的选择,对于应用开发者而言是完全透明的。

对于内存数据库而言,实现了数据在内存中的管理,而不仅仅是作为数据库的缓存。不像其它将磁盘数据块缓存到主存中的数据库,内存数据库的内存引擎使用了为随机访问内存而特别设计的数据结构和算法,这种设计使其避免了因使用排序命令而经常破坏缓存数据库性能的问题。通过内存数据库,减少了磁盘I/O,能够达到了以磁盘I/O 为主的传统数据库无法与其相比拟的处理速度。

因此,内存数据库技术的应用,可以大大提高数据库的速度,这对于需要高速反应的数据库应用,如电信、金融等提供了有力支撑。

由于把大多数数据都放在内存中进行 *** 作,使得内存数据库有着比磁盘数据库高得多的性能表现,这一特点非常契合电信企业运营支撑系统对实时性的要求。

电信业的竞争正在全方位地展开,这种竞争必然带来新的价值链模式以及新的计费方式,这些变化对目前的电信运营支撑系统是一个挑战。比如,多种业务的计费环节将不再是单一的按照时长或通信距离收取费用,而可能是根据时长、内容、使用量等多种参数的组合计费。为了应对这些挑战,电信企业先后引入了内存数据库,以提高后台数据管理的实时性、精确性和灵活性。

尽管内存数据库已不是传统磁盘数据库的概念,但是内存数据库本质上还是数据库,它也具有一般数据库的基本功能:

■ 永久数据的管理,包括数据库的定义、存储、维护等;

■ 完成各种数据 *** 作,如查询处理、存取、完整性检查;

■ 事务管理,包括调度与并发控制等;

■ 对存取的控制和安全性检验;

■ 具有数据库的可靠性恢复机制。

相对于利用程序开发手段调用内存处理来说,内存数据库自有其优势。首先,内存数据库是产品化的数据库管理软件,极大缩短了开发周期; 其次,内存数据库有着开放的平台和接口,程序开发和移植更加灵活便捷,也便于维护和二次开发; 第三,可以通过使用统一的SQL语言方便地查询内存中的数据; 最后,能在数据库中保障数据的安全性和完整性。这些优势,对于快速部署和简化维护都是有利的。

但内存数据库也有其不可避免的缺点,比如: 不容易恢复,内存数据库中的数据不总是永久的,为了保证实时,也不一定是一致和绝对正确的,有的是短暂的,有的是暂时不一致或非绝对正确的。

电信企业一直是内存数据库的主要用户,近几年来,随着计算机硬件技术的飞速发展、内存容量的提高、价格下跌以及计算机进入64位时代 *** 作系统后可以支持更大的地址,为内存数据库的实现提供了可能。目前内存数据库在电信行业的应用也日趋成熟,已有超过90G的电信系统案例,能自动扩展内存空间,不需要重启数据库,提供ESOL自定义存储过程,支持多线程,开发效率高,程序移植容易等等。

下面以两个例子来介绍内存数据库的应用。

电信计费数据的加载

电信的二次批价和实时累账是计费系统中的两个必备功能。

所谓二次批价是相对于一次批价来说的。

一次批价是按照国家标准资费来进行价格计算,比如: 全球通每分钟本地通话为04元,在一次批价完成后,会根据这个用户的套餐进行再一次的计算。以北京全球通用户接听4分钟的电话为例,一次批价完成后,这条话单的价格是16元,如果这个用户参加了10元包月接听套餐,那么在二次批价后,这次通话的费用就为0元。

一次批价是用于各大运营商之间结算的,而二次批价是针对用户个人的。

实时累账是将用户从每月1号到目前为止的所有费用累加起来,也就是用户目前可以通过10086查到截止到前一天的实时话费。累账值可以帮助用户控制高额话费或是供用户即时查询消费信息。

二次批价和实时累账过程涉及用户资料、用户套餐等与用户相关的信息,电信支撑系统在开始批价时必须加载这些数据。稍大一点的省级运营商的这些数据就会超过1000万条,计费处理模型也由于套餐的组合、产品的组合以及不同的优惠规则变得相当复杂,加载这部分数据对系统而言是一笔不小的开销,这就使得现在的计费处理速度比较慢,而且很难做到对数据的实时更新。内存数据库的引入在一定程度上解决了这个问题。

在计费二次批价过程中数据量最大的是详单数据,这部分数据不用放在内存数据库中,每处理完一个话单文件或达到设定的提交记录数时直接 *** 作磁盘数据库,不会影响系统性能。最急切的是将用户资料、套餐、营业套餐和计费套餐对应关系数据、计费套餐模型数据及用户累计数据放到内存数据库中,这部分数据查询 *** 作远比数据新增和更新 *** 作要频繁。除了这些数据外,当然还有应用需要的其他数据也都可以加载到内存数据库。

在采用内存数据库后,用户通过营业部或客户查询实时话费的时候完全可以做到实时,比目前只能提供查询到前一天的实时话费在业务上有了质的飞跃。因为系统在处理这部分数据时查询流程和以前的完全一样,但系统省去了以往内存中的数据和磁盘数据库数据同步的环节,所以就能做到了实时查询。对于信控来说也同样,以往系统在累完账后要按照一定周期刷新信控数据,这就存在一个时间差,不能够完全做到实时。

而采用内存数据库后,信控可以直接取得内存数据库中的实时话费累计表中的数据,完全实现实时预警、停机。二次批价和累账中采用内存数据库后,对防欺诈、收入保障系统也有相当大的好处,这样能够充分保证运营商的切身利益。

另外,在采用内存数据库后,整体提高了系统批价、累账的处理速度,大大缓解访问磁盘数据库的压力,提高数据查询、修改、删除的效率,也为后付费和预付费的融合提供了可能。

电信计费数据的同步

电信营业数据和计费系统中的数据总是在不断的变化中,这就涉及内存数据库中的数据和磁盘数据库数据的同步问题(为了描述清楚,这里的磁盘数据库以Oracle DB为例来说明)。数据同步包括两部分: 从内存数据库到Oracle DB数据同步和从Oracle DB到内存数据库的同步。

1 Oracle DB到内存数据库同步

这部分数据同步采用增量表的方式,营业系统或CRM新增或更新的数据将生成到Oracle的增量表中,计费后台程序先到这些增量表中查询数据。如果能在这些增量表中查到数据就把这些数据更新到内存数据库对应表中,如果查不到,就直接从内存数据库中直接查询,从而保证了数据的完整性和实时性。由于增量表的数据量一般会很小,所以这部分 *** 作不会影响系统的性能。

2 内存数据库到Oracle DB同步

由于Oracle的计费后台批价、累账数据几乎都加载到了内存数据库中,所以Oracle数据库对应的数据表将主要用于对内存数据库的数据备份。

用户最新的实时话费等信息都保存在内存数据库中,实时话费查询将直接连接到内存数据库中查询,保证用户得到最新的费用信息。信控也直接从内存数据库查询数据,因此对Oracle中的这部分数据已经没有实时性的要求。这时内存数据库到Oracle的同步可以由应用程序生成文件,定时地往Oracle数据库中同步备份,或者采用Oracle 存储过程在系统相对空闲时间段进行数据导入就可以了。

总体而言,由于市场与技术的快速发展,电信业务在不断扩充,其运营和管理不断优化,传统的一些支撑系统的架构已经逐渐不能满足日益增长的业务要求和客户需求,引入一些新的技术来解决我们生产中遇到的问题是必然的。比如采用内存数据库来代替以前的共享内存技术,使得原来在内存中不标准的东西,包括接口、格式和管理都标准化了。

内存数据库只是多种新技术中有代表性的一种而已,只要解放思想、选用得当,完全可以在投入不大的情况下克服系统中的瓶颈,以最小的代价获得最大回报。

通用数据库大家见的多了,Oracle、Db2、Sqlserver、Sybase、Informix 还有最近比较火的Mysql、和Pqllite,当然还不能忘记开源的PostgreSQL。通常情况下这些数据库可以承担重要业务,但是在要求高性能方面还是略有不足。在计费系统中如果用户信息常常改变的话延迟方面就会产生比较大的影响,甚至能影响到计费系统的正常运行。

我接触到唯一的内存数据库就是亚信在中移动计费中心稽核系统中使用的。由于稽核系统需要实施同步用户状态信息和订购信息,然后对产生的话单进行稽核,如果响应速度较慢的话就会产生错误的结果。最初没有稽核系统的时候,计费的标准基本是sp发过来的,然而用户方面却经常发现自己没有实际使用或者已经取消这项业务的时候,自己的帐单中仍然收取了费用,因此中移动决心要对sp的话单进行稽核,以自己的数据为标准,彻底剪断sp乱收费的手段。

如果要取到用户状态信息和订购信息的话就要从多个系统中同步过来,同时对话单进行稽核,中间的处理时间要求比较严格(用户可能会在短时间内检查自己的话费信息),对系统响应时间就要尽量短。

通用数据库在这方面处于劣势。亚信就以三台rx8420作为数据库主机,将31个省用户的信息按照数量的多少分担到三台主机,每个省至少有一个入库进程,对于用户比较多的就采用多个进程进行入库。数据的采集来源主要是通过BOSS和计费的一级系统。

由于数据是存储在内存中,所以存储的数据结构和通用数据库有所差异,同时为了保证数据的安全,在磁盘上有一个内存数据的镜像,每隔一定时间将内存中的数据同步到磁盘上,当主机故障时可以通过磁盘恢复数据。当主机故障时,会有备用主机通过HA接管。但是对于数据 *** 作的日志和回滚就没有Oracle做的好了,只提供了简单的恢复机制。

在计费系统中首先要对sp发来的话单进行稽核,主要标准是用户状态和订购信息。例如用户最近7天一直处于关机状态,如果sp的话单中出现新的订购信息就将此条话单作为错单处理。移动通过这种方式在和sp的博弈中取得主动。稽核系统上线后用户对于sp的投诉问题明显减少。

链接一:内存数据库与传统数据库的异同

传统的数据库系统是关系型数据库,开发这种数据库的目的,是处理永久、稳定的数据。关系数据库强调维护数据的完整性、一致性,但很难顾及有关数据及其处理的定时限制,不能满足工业生产管理实时应用的需要,因为实时事务要求系统能较准确地预报事务的运行时间。

对磁盘数据库而言,由于磁盘存取、内外存的数据传递、缓冲区管理、排队等待及锁的延迟等使得事务实际平均执行时间与估算的最坏情况执行时间相差很大,如果将整个数据库或其主要的"工作"部分放入内存,使每个事务在执行过程中没有I/O,则为系统较准确估算和安排事务的运行时间,使之具有较好的动态可预报性提供了有力的支持,同时也为实现事务的定时限制打下了基础。这就是内存数据库出现的主要原因。

内存数据库所处理的数据通常是"短暂"的,即有一定的有效时间,过时则有新的数据产生,而当前的决策推导变成无效。所以,实际应用中采用内存数据库来处理实时性强的业务逻辑处理数据。而传统数据库旨在处理永久、稳定的数据,其性能目标是高的系统吞吐量和低的代价,处理数据的实时性就要考虑的相对少一些。实际应用中利用传统数据库这一特性存放相对实时性要求不高的数据。

在实际应用中这两种数据库常常结合使用,而不是以内存数据库替代传统数据库。

链接二:几款内存数据库产品

■ Oracle TimesTen

Oracle TimesTen是Oracle从TimesTen公司收购的一个内存优化的关系数据库,它为应用程序提供了实时企业和行业(例如电信、资本市场和国防)所需的即时响应性和非常高的吞吐量。Oracle TimesTen可作为高速缓存或嵌入式数据库被部署在应用程序层中,它利用标准的 SQL 接口对完全位于物理内存中的数据存储区进行 *** 作。

■ Altibase

Altibase是一个在事务优先的环境中提供高性能和高可用性的软件解决方案。它提供高性能、容错能力和事务管理能力,特别适合通信、网上银行、证券交易、实时应用和嵌入式系统领域。Altibase能够最大限度地发挥数据库服务系统的潜力,增强数据服务器的处理能力。Altibase支持客户端/服务器架构或嵌入式架构。其中客户端/服务器架构非常适合一般的应用。而嵌入式架构将应用程序嵌入到数据库服务器,适合于有高时效要求的实时系统。

■ eXtremeDB

eXtremeDB实时数据库是McObject公司的一款特别为实时与嵌入式系统数据管理而设计的数据库,只有 50K到130K的开销,速度达到微秒级。eXtremeDB完全驻留在主内存中,不使用文件系统(包括内存盘)。eXtremeDB采用了新的磁盘融合技术,将内存拓展到磁盘,将磁盘当做虚拟内存来用,实时性能保持微秒级的同时,数据管理量在32BIT下能达到20G。

目前关系型内存数据库主要有MySQL(使用内存存储引擎)、SQL Server(In-Memory OLTP)、数蚕内存数据库、Oracle 内存数据库。

MySQL:免费产品,内存存储引擎使用较少。

SQL Server:微软的商业化产品,是为了适应大数据等业务产品新添加的存储引擎,微软SQL语句兼容性好,商业化成熟度高。

数蚕内存数据库:数蚕科技针对中小型企业的内存数据库,目前成熟度较弱,c++接口特性良好,SQL特性较弱,只支持基本的SQL语句 *** 作,不支持事务。

Oracle 内存数据库:基于内存计算的关系数据库, 提供了响应时间极 短且吞吐量极高的应用程序。

非关系型内存数据库主要有FastDB、Memcached和Redis等主流内存数据库。结构简单,支持数据结构多以基础数据结构为主,一般应用于缓存等非关键数据存储,其优点是数据查询速度快,对下层编程接口良好。

2008年,SIGMOD的一篇论文对面向磁盘的数据库性能开销做了分析⌄把整个数据库系统的开销做了统计。分析发现典型的数据库环境中实际上只有12%的资源是在真正处理业务查询和处理逻辑。其中30%用于缓冲区管理,30%处理数据并发控制管理的开销(Locking和Latching),28%处理数据库日志的处理(Logging)。如何降低这些数据库额外开销是考虑的重点方向。建议题主多关注行业公众号,比如 柏睿数据

以上就是关于java多用户同时访问和数据库进行交互,如何能够高并发全部的内容,包括:java多用户同时访问和数据库进行交互,如何能够高并发、谁可以告诉我一些关于内存数据库的情况、redis等内存数据库可否代替共享内存作为进等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9636722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存