【干货】分布式内存数据库新架构,极速OLTP应用新利器

下载网站:www.SyncNavigator.CN 
 客服QQ1793040
----------------------------------------------------------node


关于HKROnline SyncNavigator 注册机价格的问题linux

 

 

HKROnline SyncNavigator 8.4.1 非破解版 注册机 受权激活教程
 数据库

 

 

 

最近一直在研究数据库同步的问题,在网上查了不少资料,也请教了不少人,找到了一种经过快照复制的方法。研究了一番后发现以前就是用的这个方法,效果不是很好,果断放弃。通过了一番寻觅和他人指点,最后从一位热心网友那里得知一款很好用的软件—— SyncNavigator。编程

 

 

好东西就要拿出来跟你们分享,因此今天向你们介绍一下这款软件,及其一些使用方法。下面先看看它有什么强大的功能吧!缓存

 

SyncNavigator的基本功能:网络

 

自动同步数据/定时同步数据
不管是实时同步/24小时不间断同步,仍是根据计划任务(每小时/每日/每周/等)定时自动同步都能彻底胜任。架构

完整支持 Microsoft SQL Server
完整支持 Microsoft SQL Server 2000 2005 2008 数据库类型。并能在不一样数据库版本之间相互同步数据。并发

支持 MySQL 4.1 以上版本
支持 MySQL 4.1 5.0 5.1 5.4 5.5。并能在不一样数据库版本之间相互同步数据。oracle

无人值守和故障自动恢复
当数据库故障或网络故障之后,无需人工干预(或操做)自动恢复同步并确保数据彻底准确,可靠。异步

同构数据库同步/异构数据库同步
SQL Server to SQL Server, MySQL to MySQL, SQL Server to MySQL 等都能轻松实现。

断点续传和增量同步
当同步完成(或中断)后,再次同步时能继续上一次的位置增量同步,避免每次都须要从头开始的问题。

TimesTen Scaleout,它其实是一款关系型数据库,不过是在运行的期间,把数据全量加载到内存当中来进行实现。

【干货】分布式内存数据库新架构,极速OLTP应用新利器

Oracle TimesTen

先简单的说一下TimesTen Scaleout的历史,它其实是一款关系型数据库,不过是在运行的期间,把数据全量加载到内存当中来进行实现。TimesTen从1998年开始在全球做为首款内存关系型数据库上市,到如今已通过去了20年,这些年里咱们一直在作的一件事,纵向的提升它的性能。

由于你们都知道,从过去20年的发展历程来看,硬件的资源自己容量愈来愈大,性能愈来愈好,价格愈来愈便宜。所以TimesTen为了应对硬件变动的需求,须要不断提升纵向性能,随之从单机的方式实现到过渡的分布式。

可是如今又有不少的新挑战来临了,如今不少的客户不仅仅是要纵向的扩容,并且但愿横向的扩展。为了应对这个需求,咱们提供了分布式的全新解决方案。咱们强调同一款产品,两种部署方式,也就是说你从网上下载的软件,实际上就是一个安装包。安装包解压缩以后,能够按照本身的须要以基于主备备的传统的方式来实现纵向的扩容能力,也可使用咱们提供全新的分布式的方式来管理数据。

这二者之间应对的方向是有区别的,单机的处理能力也很是好,并且对应用来讲很是简单。在主备这样的传统的部署方式下咱们能提供一个超低延时的能力。可是若是要作分片、分布,提升高并发的读写的能力,可能还须要引入网络。这种状况下,能够考虑在稍微牺牲网络延迟,以提升吞吐量。

TimesTen Classic内核技术

刚才强调了TimesTen是一款关系型数据库,这里可能须要重申一下什么叫关系型数据库。在分布状况下,咱们强调的是原子性一致性,隔离性和持久性。支持标准的SQL,同时整个数据库运行在内存当中,能够经过应用进程嵌入式的访问数据库,来实现微秒级响应的能力。

咱们知道常规的计算下,要求一个IO的响应时间是1/1000秒,至关因而微秒级。磁盘的响应式微秒级,那内存的响应实际上是纳秒级的。因此说在内存计算里面,咱们能作到微秒级的数据库级别的响应,伴随单位时间内的超高的吞吐量,这就是TimesTen过去20年一直在作的一个纵向的吞吐的能力。

做为企业级的产品,实际上TimesTen在中国已经有差很少十年的历史,从0七、08年开始中国的各大运营商都陆续地采用TimesTen做为计费的系统来控制余额。相似这些服务在后台,实际上使用的不少都是TimesTen的技术。他们在使用时候有持有化的要求,TimesTen一样可以很好的知足。

此外咱们对Oracle数据库也有很好的兼容性,包括对Oracle的数据类型,PL/以及丰OCI的接口都有良好的一个集成。同时对Oracle后台的数据交互,也能够作到用缓存方式部署的集成。

架构图:Classic Instance

从18.1开始,咱们的安装方式发生了一点的变化,在分布式架构下,解压缩即安装。咱们实例有别Oracle的实例,Oracle的实例是在内存中运算的一个程式,可是TimesTen里面它至关于Oracle_home有一系列的可修改的软件包,里面包含一系列可执行文件,同时有一组进程,这一组进程自己只支持一套或多套数据库的。

【干货】分布式内存数据库新架构,极速OLTP应用新利器

这是什么意思呢?咱们来看一下上图,首先有这样一个硬件环境,而后咱们定义一个实例。在这个实例里面,安装解压缩完以后,建立实例启动了一个守护进程,它会拉起一个内存结构,内存结构就是TimesTen内存数据库,这个数据库会被subdaemon进程接管,subdaemon进程自己还会去作持久化的相关的维护,

数据库构建起来以后要开放给应用链接,所以咱们会有一个server的进程,相似于oracle的监听程序。监听进程打开以后,能够作不少的应用访问。若是说有高可用需求的话,也能够经过复制的代理程序去跟远端的主备备进程作一个实时的复制。

对于oracle数据库,咱们还开放一个缓存的能力,能够缓存oracle数据库里面的热点数据子集到TimesTen。这样就能加速响应时间,而且减小了对oracle的负载压力。

同时做为一个比较成熟的内核引擎,咱们还支持的丰富的这监控管理工具,这是产品自己自带的。对于微秒级响应的能力,其实是建议将应用跟TimesTen部署在同一台机器上,经过一个本地库文件的连接,它会将这个进程直接嵌入到TimesTen里面进行访问。这样的话就彻底去除了网络开销,彻底没有网络只是内存对内存的一个指针变量的偏移巡视,因此性能会很是好。

应用链接

从应用角度来说,使用TimesTen可使用直连的模式进行访问,这个性能是最好的,只不过它须要将应用程序跟TimesTen部署在同一台机器上。若是说有远端的解耦的架构,能够部署在其余的主机上,装TimesTen的客户端,而后经过调用TimesTen的TCP/IP的方式去访问数据库,数据库最后解析也会经过server变成一个直连到TimesTen本地。

应用开发

链接的接口也是很是丰富的,在过去20年的沉淀里面,咱们基本支持当前主流的全部的API的接口,基于oracle OCA的支持的能力,得以支持主流的 Python、nodeJs、Ruby、Go等编程语言的接口。

链接方式方面,为了哪些没有使用过TimesTen的客户,能力开放的相对标准。直连的话,能够经过修改JDBC,就像链接oracle同样,将链接串指向TimesTen数据库名就能够了。若是是cs的方式,只需客户端去配置一个链接串,就能够链接了。

内存结构

【干货】分布式内存数据库新架构,极速OLTP应用新利器

说到内核技术,先要谈一谈咱们的内存数据库的内存结构,内存结构自己在从TimesTen设计的第一天开始,就将数据全量加载到内存做为一个前提进行运算。因此咱们在打造的时候,其实是先有内存结构,再有磁盘的异步镜像。

咱们在打造的时候,实际上先构建了一个DbHdr,用于存取数据库的基础信息,而后有一个永久区域,这个永久区域是被持久化的。里面包含的就是用户真正关心的数据,以及系统中相对关键的一些原数据,包括表、索引。

这里面强调一点,在内存里边,咱们用的词不是以block的方式存储,而是以page的方式存存储。在TimesTen内存结构里面,页的大小是不固定的,咱们定义的是存取一个page,会存取256行的数据,行数是基于行存储的技术,而行存储技术自己取决column。

接下来就是一个临时区域,里面存放了大量的临时的信息,它是不被持久化的。好比说建的一些临时表,临时索引用来作编译,有一些锁的资源排序的资源,包括链接的一些基本信息和咱们缓存的一些SQL命令,

最后就是做为关系数据库,须要记录DML的变化,TimesTen在这里有一个log nuffer的区域,经过多轨的方式来进行内存当中的保留。因此说从应用角度来说的话,访问任何数据在内存里面只是作一个指针的偏移,返回给应用。

TimesTen是基于行的内存数据库技术,这样的内存技术,首先在操做系统层面上须要用huge的方式来锁定住的内容结构,尤为是在linux市场,若是是大于256G的容量,从产品角度自己没有一个设计的上线,共享内存段的大小,能够随着操做系统硬件资源释放出来的。可是须要在操做系统上配置一下,linux上的内存段默认限制是256G的。

此外在超大单机处理能力的状况下,还须要考虑NUMA的这样的多核技术,好比说如今的操做系统,支持多槽位的cpu处理,这些槽位之间的CPU处理,在CPU级别的一级缓存,二级缓存之间,所存取的信息是不被共享内存自己共享的。所以咱们建议绑定4槽位cpu,以这样的方式来避免NUMA的影响,绑定实例到对应的cpu的槽位。

持久化——检查点

从企业角度来说,不少客户都会关心一个问题,掉电了怎么办? 这里就来说一讲TimesTen是怎么处理这个问题。

举个例子,刚才都提到了TimesTen自己是经过检查点的方式来作数据文件的在磁盘上的存放,实际上这个检查点是内存的一个实时镜像,也就是说内存的快照。

接下来主要讲的是在事务处理的变化过程当中的刷出的机制,前面提到到了持久化的区域是DbHdr加永久区域,永久区域里面的数据是按页的方式来存取的,每一个页里面存储的是某个对应表里面的256行中的部分行数的信息。这些信息有可能被修改, 在被修改的过程当中,会发生什么状况呢?

【干货】分布式内存数据库新架构,极速OLTP应用新利器

假设T0时刻数据库已经持久化了一次到ds1文件上,在T1时刻咱们发现有一些事物进来了,对page 0进行了修改,page 0里面的信息是ds1里刚才没有的一些脏数据。Page 2对 ds0来讲也进行了修改,DS0尚未被作下一次检查点,因此说它在作检查点以前,对于ds0来讲page 2里面是脏数据。

这个时刻咱们发生了一个检查点的触发操做,默认是十分钟,由于DbHdr有一些链接信息,因此会被持久化。Page 2里面的信息因为是被标记成了脏数据,因此它是按页的脏数据的方式去刷出到ds0的文件里面,这是一个增量刷出的过程,以后它以前被标记的脏数据就会被清除掉。

接下来在T3时刻咱们又作了一些修改,脏字节也标记到对应的页上了。以后咱们会针对标记的页进行检查点的触发。触发的时候,咱们会把对应的脏数据刷出到ds1文件,他们是交替着写,也就意味着在同一个时间点,极限场景下会有一个正在写出的一个ds1,同时还有一个ds0,ds0配合事务日志的方式,就能够实现恢复。

持久化——事物日志

事务日志在内存结构里面是有一个log buffer区域,它是经过多轨的方式进行一个刷出,刷出是在操做系统文件上承载了很多天的文件。文件写满以后会增长,增长的大小是可配置的。

事务日志的刷新分为两种,第一种是默认的异步的刷新,任何一个事务过来都会按期的触发刷新。刷出的过程是多条的性能最好的这样方式。可是有些场景,好比说金融客户有些关键的业务须要持久化到磁盘再返回给应用,这种状况下咱们也支持同步的刷出。

异步和同步之间是在数据库级别进行了默认配置,你也能够在链接级别、事务级别,进行修改。

持久化——恢复

对于数据的加载咱们有检查点文件,配合的事务日志文件在磁盘上,数据库的从新加载须要读取内存镜像,若是是脏的checkpoint文件,能够读到连续的共享终端中,由于它是一个快照,因此说会直接把以前的结构在内存里面作一个镜像的回放。

构建到内存段以后的话,还能够基于日志作事务的前滚和回滚,最后达到一个一致性的点,一直读到事务日志的最后收尾的标记,以后,该回滚的回滚。

在探测里面若是说检查点中没有包含的数据发生了索引的改变,好比checkpoint的检查点作完以后,又作了一些事务的变化,这个变化影响到了某些索引,索引再从新加载的时候,它是没有被持久化的,须要被重建,重建的过程也是能够并行执行的。只有脏页索引才会被重建,不是全部的索引都会被重建。以后仍然会把能力开放给应用进行正常的访问。

并发能力

做为OLTP优化的关系型数据库。咱们也是又隔离机制的,经过Read committed的方式默认进行这样的行为的,也就是说读写之间不互斥。

在读写的过程当中,若是读操做还没读取到目标前,目标就已经被写入了,这时候写的操做实际上会影射出来一个新的版本,这个版本自己是没有被提交的,因此读取的时候读的是早期的版本,一旦目标被修改提交以后,后续发起的全部的读取操做,读取的数据就是修改过的数据。

同时TimesTen也支持隔离机制,采用线性隔离的方式,这种方式对会对单线程有很大的优化,可是对并发来,它会有不少的共享锁排查锁这样的机制,因此要尽量在高并发系统上避免隔离机制。

索引

数据库事务处理的应用确定须要修改数据库,修改以后的数据查找,就涉及到索引。TimesTen支持两种主要类型的查找,第一个查找的方式是基于哈希索引,这种方式对等值查询的性能是最好,可是对范围查询来讲不太适合。

缺点在于它须要维护一个哈希链表,这个哈希链表的估值是整个表全量值的一个超集,不能小于总行数。

另外一种方式是咱们默认的索引建立,它可以很好的作范围查找,等值查找的性能也不会特别差。更主要的是在高并发的维护状况下,这种新的索引模式对读彻底没有锁。对写来讲,因为B-tree索引是分节点的维护,减小了热点征用,以细粒度闩锁的设计,来减小对整个b-tree锁的对并发的影响。

TimesTen Scaleout

市场上有不少的客户对分布式的强烈需求,同时客户本身自己也在作各类的分片的一个尝试来应对他们海量数据高并发的处理。

这种状况下,TimesTen进行了内核的改造,改造的量并非特别大,咱们引入了管理实例的概念。管理实例有点相似于刚才介绍的传统模式,可是它里面存放的东西只是元数据,实际的数据是放在数据实例里面进行管理的。

【干货】分布式内存数据库新架构,极速OLTP应用新利器

这个图里面惟一有一个变化的地方,仅仅是database变成了database Element。Element只是整个分布式集群里面的一个节点,里面存放的只是N分之一的数据,数据是打散的。

为了解决分布式里面的全局一致性的问题,咱们引入了一个叫Epoch的机制,它配合着全局事务的概念,可以作到在分布式里面保证原子性。基于这个前提就能够作到分布式里面的强一致性。

基于这样的全新的架构基础上,咱们作了不少的封装,在实例级别能够跟内部通道,跟其余的实例进行自动的内部的交互。

同时还引入了管理实例的概念,因此管理实例会直接跟TimesTen实例进行通讯,来作实时状态的变动和集群拓扑关系的变动。

这样的能力使得咱们能够实如今一个位置在管理实例上,一键安装一键管理。对数据库来讲,无论是十个节点,20个节点,30个节点,只用在管理节点上执行一个命令进行配置,剩下的任务是由管理实例自动的去作,不须要登陆到具体的数据实例进行配置。

High Availability

在企业级的需求里边,他们对TimesTen早期有一个很强的诉求,就是不用复制的方式帮实现高可用。

虽然TimesTen从引擎来说的话,原生支持复制,可是咱们在分布式架构里面作了很大的改造,让它支持多副本的技术。在Aynchronous的架构下面,首先配置的主机,用Data Space Group来隔离物理位置, 以后在一对机房的两个节点,能够分配成一个副本,这样两个副本就实时同步了。

在这个基础上,咱们整个数据库是基于多个副本级的方式来呈现给这个应用的。副本集如今支持的是两副本,后续会支持三副本。

基于以前介绍的内核的原理,咱们的实例级别和数据库级别有持久化能力,这些能力开放到分布式里面,就是一个个的节点,叫作Element。Element有本身的持久化,存放的数据是一小部分的数据单元,而且有能力接受应用的访问,这就意味着全部的节点,即便在高可用的方式下,都是全读全写的能力开放给应用。

内部由于咱们要作一致性的OLTP的应用访问,因此是基于优化的两阶段提交,来实现事务的强一致性。

TimesTen Scaleout Architecture Overview

【干货】分布式内存数据库新架构,极速OLTP应用新利器

TimesTen的软件安装,须要先准备zookeeper。它是做为轻量级的成员管理的角色来管理实例之间的行为。咱们建议使用内外网的架构,固然咱们也支持单网卡,不过单网卡的吞吐量会混杂内部事务和外部的应用链接。所以仍是建议使用双网卡,作两个内网和外网的隔离。以后能够选一个节点做为的管理节点,管理节点自己在生产环境上,可使用高可用的方式进行储备,这都是自动能够配置的。

以后选择一个拓普关系,建立数据实例的属性,一旦配置好以后就能够在管理实力上进行一键的安装配置把数据库拉起来。

若是须要一键日志收集或者一键的备份,能够配一个资料库。经过管理节点的命令了,来实现整个的自动化的管理。

对于图形化管理,可使用SQL DEVELOPER工具,经过SSh的方式连到管理实例上进行管理。

性能小贴士通用篇

首先讲一下普世性的优化贴士,好比在使用内存技术的时候,咱们须要尽量节省你的内存空间,因此建议在TimesTen里面使用原生的字段。对于变长的字段合理使用Inline和out of line。

做为关系数据库的确定要作到合理使用的索引,经过咱们的索引指南来选择是使用哈希哈斯范围索引,同时还须要更新优化器的统计信息,由于TimesTen自己也是基于成本的优化器,对于SQL来讲的也须要作好正常的数据量变动以后的更新同信息的收集,让数据库真实的执行计划可以反映数据的实际状况。

最后就是数据库自己的配置,包括基于目标负载和硬件等优化数据库参数,使用HDD存储须要将检查点文件和事务日志文件隔离I/O,避免I/O争用,使用huge pages,没法使用的状况下,则考虑在内存中锁定数据库。

Scaleout篇

在分布式里面首先引入的是网络,咱们建议是使用万兆网进行内部的配置。尽量的是选择大容量的主机要好于低配的小组机,由于你有更少的网络开销,可以充分发挥的纵向的并发的能力。

优化方面,对于表的分布,若是是超大表的解决方案,可能要考虑用哈希的分布打散。

在分布式中,TimesTen还追加了全局索引和本地索引的概念。在分布键选择的时候能够选择某一个主键,或者是任何的组合键,做为哈希分布的分布键。

应用篇

在应用开发角度咱们也有必定的优化建议的。好比说使用参数化的SQL,而不是用硬写的方式将绝对的查询值写到SQL的变量中。并且咱们建议在每一次发起链接的时候作一个parse,这样生成的执行计划就避免了硬解析和软解析,甚至会复用它的执行计划到其余的链接,由此性能方面会减小不少的没必要要的开销。

有时候SQL中还会涉及隐含的数据类型或者字符集的转换,若是能的避免的话,也能够减小没必要要的开销。

同时刚才强调了TimesTen里面的内存结构是以256行做为一个page存放。因此从插入批处理的角度来说,咱们能够以256行的倍数进行批处理,这样的话可以充分利用它page的能力,减小行插入的性能损耗。

适用场景

若是低延迟需求,好比要求的响应时间在一毫秒,或者是几毫秒这样很是苛刻的场景下,咱们建议使用TimesTen传统的方式进行部署, 这样即便在单机的状况下也能达到每秒千万级的查询能力。咱们的主备备方式,能够实现纵向的企业的能力的扩展。在横向能实现读的能力的扩展。

若是有oracle数据库作加速,能够经过read-only或者read-write-caching的方式进行配置,将oracle的热点数据子集加载到TimesTen当中进行运算,数据的同步是由缓存的代理和复制代理来实现。

若是说在亚毫秒级或者是十毫秒以上容忍度的状况下,对高并发有上亿次的TS需求。TimesTen如今极限的场景测试能达到10亿每秒的查询能力。

因此说这种分布式的架构里面响应时间不是他的优点,可是在多节点同步的高并发处理上,他有绝对的读写扩展的能力,这是须要你们综合考量的点。

相关文章
相关标签/搜索