精华内容
下载资源
问答
  • 常用数据库有哪些?redis用过吗? 常见的主流数据库(DBMS):https://blog.csdn.net/gengkui9897/article/details/89294936 关系型数据库 MySQL数据库 Microsoft SQL Server数据库 Oracle数据库 Postgresql...
    常用的数据库有哪些?redis用过吗?

    常见的主流数据库(DBMS):https://blog.csdn.net/gengkui9897/article/details/89294936
    关系型数据库

    1. MySQL数据库
    2. Microsoft SQL Server数据库
    3. Oracle数据库
    4. Postgresql数据库
    5. Sybase数据库
    6. DB2数据库
    7. Access数据库

    非关系型数据库

    1. Mongodb数据库
    2. Redis数据库
    3. Hbase数据库
    4. Memcaced数据库

    常见的nosql数据库有哪些?以及他们的特点与区别?:
    https://blog.csdn.net/wyz0516071128/article/details/80877984

    Redis 和 Memcached 和mongodb的区别

    Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。

    Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

    MongoDB是一个基于分布式文件存储的数据库,文档型的非关系型数据库,与上面两者不同。

     

     

    1.性能上:
         性能上都很出色,具体到细节,由于 Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比 Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。
    前两者性能差不多,大于 Mongodb。
     
    2.内存空间和数据量大小:
         MemCached可以修改最大内存,采用LRU算法。Redis增加了VM的特性,突破了物理内存的限制。(2.4后取消
       MongoDB 适合大数据量的存储,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务不要和别的服务在一起。
     
    3.操作便利上:
         MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。
       Mongodb 支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
     
    4.可靠性上:
         MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
       MongoDB 从 1.8 版本开始采用 binlog 方式支持持久化的可靠性。
     
    5.应用场景:
         Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
         Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
       MongoDB:主要解决海量数据的访问效率问题。 
     
    需要慎重考虑的部分
     
    1.Memcached单个key-value大小有限,一个value最大只支持1MB,而Redis最大支持512MB
    2.Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,因此对对可靠性方面要求比较高
    3. 从本质上讲,Memcached只是一个单一key-value内存Cache;而Redis则是一个数据结构内存数据库,支持五种数据类型,因此Redis除单纯缓存作用外,还可以处理一些简单的逻辑运算,Redis不仅可以缓存,而且还可以作为数据库用
    4.新版本(3.0)的Redis是指集群分布式,也就是说集群本身均衡客户端请求,各个节点可以交流,可拓展行、可维护性更强大。

    5. MongoDB不支持事务。




    转自   http://www.cnblogs.com/cac2020/p/6044536.html

    Redis 的作者 Salvatore Sanfilippo 曾经对这两种基于内存的数据存储系统进行过比较:


    1. Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。


    2. 内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。


    3. 性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。


    具体为什么会出现上面的结论,以下为收集到的资料:


    1、数据类型支持不同


    与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis内部使用一个redisObject对象来表示所有的key和value。redisObject最主要的信息如图所示:



    type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:”123″ “456”这样的字符串。只有打开了Redis的虚拟内存功能,vm字段字段才会真正的分配内存,该功能默认是关闭状态的。


    1)String


    • 常用命令:set/get/decr/incr/mget等;


    • 应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类;


    • 实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。


    2)Hash


    • 常用命令:hget/hset/hgetall等


    • 应用场景:我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;


    • 实现方式:Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如图所示,Key是用户ID, value是一个Map。这个Map的key是成员的属性名,value是属性值。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。



    3)List


    • 常用命令:lpush/rpush/lpop/rpop/lrange等;


    • 应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;


    • 实现方式:Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。


    4)Set


    • 常用命令:sadd/spop/smembers/sunion等;


    • 应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的;


    • 实现方式:set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。


    5)Sorted Set


    • 常用命令:zadd/zrange/zrem/zcard等;


    • 应用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。


    • 实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。


    2、内存管理机制不同


    在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。当从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。 这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。


    对于像Redis和Memcached这种基于内存的数据库系统来说,内存管理的效率高低是影响系统性能的关键因素。传统C语言中的malloc/free函数是最常用的分配和释放内存的方法,但是这种方法存在着很大的缺陷:首先,对于开发人员来说不匹配的malloc和free容易造成内存泄露;其次频繁调用会造成大量内存碎片无法回收重新利用,降低内存利用率;最后作为系统调用,其系统开销远远大于一般函数调用。所以,为了提高内存的管理效率,高效的内存管理方案都不会直接使用malloc/free调用。Redis和Memcached均使用了自身设计的内存管理机制,但是实现方法存在很大的差异,下面将会对两者的内存管理机制分别进行介绍。


    Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。Slab Allocation机制只为存储外部数据而设计,也就是说所有的key-value数据都存储在Slab Allocation系统里,而Memcached的其它内存请求则通过普通的malloc/free来申请,因为这些请求的数量和频率决定了它们不会对整个系统的性能造成影响Slab Allocation的原理相当简单。 如图所示,它首先从操作系统申请一大块内存,并将其分割成各种尺寸的块Chunk,并把尺寸相同的块分成组Slab Class。其中,Chunk就是用来存储key-value数据的最小单位。每个Slab Class的大小,可以在Memcached启动的时候通过制定Growth Factor来控制。假定图中Growth Factor的取值为1.25,如果第一组Chunk的大小为88个字节,第二组Chunk的大小就为112个字节,依此类推。




    当Memcached接收到客户端发送过来的数据时首先会根据收到数据的大小选择一个最合适的Slab Class,然后通过查询Memcached保存着的该Slab Class内空闲Chunk的列表就可以找到一个可用于存储数据的Chunk。当一条数据库过期或者丢弃时,该记录所占用的Chunk就可以回收,重新添加到空闲列表中。从以上过程我们可以看出Memcached的内存管理制效率高,而且不会造成内存碎片,但是它最大的缺点就是会导致空间浪费。因为每个Chunk都分配了特定长度的内存空间,所以变长数据无法充分利用这些空间。如图 所示,将100个字节的数据缓存到128个字节的Chunk中,剩余的28个字节就浪费掉了。



    Redis的内存管理主要通过源码中zmalloc.h和zmalloc.c两个文件来实现的。Redis为了方便内存的管理,在分配一块内存之后,会将这块内存的大小存入内存块的头部。如图所示,real_ptr是redis调用malloc后返回的指针。redis将内存块的大小size存入头部,size所占据的内存大小是已知的,为size_t类型的长度,然后返回ret_ptr。当需要释放内存的时候,ret_ptr被传给内存管理程序。通过ret_ptr,程序可以很容易的算出real_ptr的值,然后将real_ptr传给free释放内存。




    Redis通过定义一个数组来记录所有的内存分配情况,这个数组的长度为ZMALLOC_MAX_ALLOC_STAT。数组的每一个元素代表当前程序所分配的内存块的个数,且内存块的大小为该元素的下标。在源码中,这个数组为zmalloc_allocations。zmalloc_allocations[16]代表已经分配的长度为16bytes的内存块的个数。zmalloc.c中有一个静态变量used_memory用来记录当前分配的内存总大小。所以,总的来看,Redis采用的是包装的mallc/free,相较于Memcached的内存管理方法来说,要简单很多。


    3、数据持久化支持


    Redis虽然是基于内存的存储系统,但是它本身是支持内存数据的持久化的,而且提供两种主要的持久化策略:RDB快照和AOF日志。而memcached是不支持数据持久化操作的。


    1)RDB快照


    Redis支持将当前数据的快照存成一个数据文件的持久化机制,即RDB快照。但是一个持续写入的数据库如何生成快照呢?Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。我们可以通过Redis的save指令来配置RDB快照生成的时机,比如配置10分钟就生成快照,也可以配置有1000次写入就生成快照,也可以多个规则一起实施。这些规则的定义就在Redis的配置文件中,你也可以通过Redis的CONFIG SET命令在Redis运行时设置规则,不需要重启Redis。


    Redis的RDB文件不会坏掉,因为其写操作是在一个新进程中进行的,当生成一个新的RDB文件时,Redis生成的子进程会先将数据写到一个临时文件中,然后通过原子性rename系统调用将临时文件重命名为RDB文件,这样在任何时候出现故障,Redis的RDB文件都总是可用的。同时,Redis的RDB文件也是Redis主从同步内部实现中的一环。RDB有他的不足,就是一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。在某些业务下,这是可以忍受的。


    2)AOF日志


    AOF日志的全称是append only file,它是一个追加写入的日志文件。与一般数据库的binlog不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令。只有那些会导致数据发生修改的命令才会追加到AOF文件。每一条修改数据的命令都生成一条日志,AOF文件会越来越大,所以Redis又提供了一个功能,叫做AOF rewrite。其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的操作只会有一次,而不像一份老文件那样,可能记录了对同一个值的多次操作。其生成过程和RDB类似,也是fork一个进程,直接遍历数据,写入新的AOF临时文件。在写入新文件的过程中,所有的写操作日志还是会写到原来老的AOF文件中,同时还会记录在内存缓冲区中。当重完操作完成后,会将所有缓冲区中的日志一次性写入到临时文件中。然后调用原子性的rename命令用新的AOF文件取代老的AOF文件。


    AOF是一个写文件操作,其目的是将操作日志写到磁盘上,所以它也同样会遇到我们上面说的写操作的流程。在Redis中对AOF调用write写入后,通过appendfsync选项来控制调用fsync将其写到磁盘上的时间,下面appendfsync的三个设置项,安全强度逐渐变强。


    • appendfsync no 当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。


    • appendfsync everysec 当设置appendfsync为everysec的时候,Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。但是当这一次的fsync调用时长超过1秒时。Redis会采取延迟fsync的策略,再等一秒钟。也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞。所以结论就是,在绝大多数情况下,Redis会每隔一秒进行一次fsync。在最坏的情况下,两秒钟会进行一次fsync操作。这一操作在大多数数据库系统中被称为group commit,就是组合多次写操作的数据,一次性将日志写到磁盘。


    • appednfsync always 当设置appendfsync为always时,每一次写操作都会调用一次fsync,这时数据是最安全的,当然,由于每次都会执行fsync,所以其性能也会受到影响。


    对于一般性的业务需求,建议使用RDB的方式进行持久化,原因是RDB的开销并相比AOF日志要低很多,对于那些无法忍数据丢失的应用,建议使用AOF日志。


    4、集群管理的不同


    Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。


    Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。下图给出了Memcached的分布式存储实现架构。当客户端向Memcached集群发送数据之前,首先会通过内置的分布式算法计算出该条数据的目标节点,然后数据会直接发送到该节点上存储。但客户端查询数据时,同样要计算出查询数据所在的节点,然后直接向该节点发送查询请求以获取数据。



    相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。最新版本的Redis已经支持了分布式存储功能。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。下图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个key的数值域分成4096个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是4096。Redis Cluster使用的分布式算法也很简单:crc16( key ) % HASH_SLOTS_NUMBER。



    为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点。在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点。这样在整个集群中,任意两个节点的宕机都不会导致数据的不可用。当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点。



    参考资料:


    • http://www.redisdoc.com/en/latest/

    • http://memcached.org/


    转自https://blog.csdn.net/hackercn9/article/details/54846048


    展开全文
  • 数据库选项,上课时用过的,希望对大家帮助
  • 数据库常用配置选项

    2017-12-13 15:57:56
    实例名Database Enginexp_cmdshell—>  ... -- 允许配置高级选项   EXEC sp_configure 'show advanced options', 1   GO   -- 重新配置   RECONFIGURE   GO   -- 启用xp_cmdshell   EXEC sp_co
    实例名Database Enginexp_cmdshell—> 
    
      启用 
      2.sp_configure 
      -- 允许配置高级选项 
      EXEC sp_configure 'show advanced options', 1 
      GO 
      -- 重新配置 
      RECONFIGURE 
      GO 
      -- 启用xp_cmdshell 
      EXEC sp_configure 'xp_cmdshell', 0 
      GO 
      --重新配置 
      RECONFIGURE 
      GO 
      --执行想要的xp_cmdshell语句 
      Exec xp_cmdshell 'query user' 
      GO 
      --用完后,要记得将xp_cmdshell禁用(从安全角度安全考虑) 
      -- 允许配置高级选项 
      EXEC sp_configure 'show advanced options', 1 
      GO 
      -- 重新配置 
      RECONFIGURE 
      GO 
      -- 禁用xp_cmdshell 
      EXEC sp_configure 'xp_cmdshell', 1 
      GO 
      --重新配置 
      RECONFIGURE 
      GO

    使用 sp_configure 时,必须在设置一个配置选项后运行 RECONFIGURE 或者 RECONFIGURE WITH OVERRIDE。RECONFIGURE WITH OVERRIDE 语句通常专门用来设置那些使用起来应当十分小心的配置选项。但是,RECONFIGURE WITH OVERRIDE 可用于所有的配置选项,并且可以用它代替 RECONFIGURE。
    每个选项的值都可使用以下语句确定。
    SELECT * FROM sys.configurations
    ORDER BY name ;
    GO


    若要用 sp_configure 配置高级选项,必须首先在 "show advanced options" 选项设置为 1 的情况下运行 sp_configure,然后运行 RECONFIGURE:
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'cursor threshold', 0;
    GO
    RECONFIGURE;
    GO

    exec sp_configure 'show advanced options',1
    go
    reconfigure;
    go
    exec sp_configure 'Ad Hoc Distributed Queries',1
    go
    reconfigure;
    go
    展开全文
  • 数据库同步3大难题: 1是如何保障目标和源数据一致性; 2是异构数据库如何做数据类型转换,导致数据同步失败的原因常常是因为数据类型不一样; 3是在数据越实时越价值的背景下,同步过程中能否做到实时同步。

    摘要

    数据库同步有3大难题:
    1是如何保障目标和源数据一致性;
    2是异构数据库如何做数据类型转换,导致数据同步失败的原因常常是因为数据类型不一样;
    3是在数据越实时越有价值的背景下,同步过程中能否做到实时同步。

    一、几种主流的数据库同步方式

    方式一:基于无侵入的日志模式(如Oracle redo、Mysql binlog)
    基于日志的采集方式无需在源库端部署任务代理程序(Agent)及建任何表,对源数据库无侵入和影响压力;

    方式二:基于时间戳
    同步过程通过特定属性(如时间戳、自增序列)来识别新插入的数据,该方式实现最简单,但无法记录删除和更新,也不具备实时的能力;

    方式三:基于触发器
    基于数据库的触发器机制,当执行DML相关语句时,执行动作来捕获数据,该方式会降低系统能,因此大多数场景下,生产系统不允许添加触发器。

    方式四:基于快照
    基于快照的方式,可以通过比较源表和快照表来获得数据变化,但需要消耗大量存储空间和计算资源。

    方式五:基于离线批处理
    通过jdbc查询来批量获取数据,会进行数据表的大范围扫描和数据提取,会对数据库产生大量开销。

    本文主要探讨无侵入的CDC模式,并以运用这种模式的数据库同步云工具 Tapdata Cloud 举例,你要问我为啥用它举例,原因只有一个:永久免费。

    二、架构及工作原理

    Tapdata Cloud包含两部分:

    1. Tapdata Cloud Manager,TCM是Tapdata Cloud的管理端,负责agent实例的安装,同步任务的配置、分发、任务状态监测。
    2. Tapdata agent,是Tapdata Cloud数据同步服务的执行实例,负责从TCM获取任务信息,通过流式技术从源系统获取数据、处理转换数据并发送到目标系统,并在任务执行过程中监测并上报任务状态至TCM。

    在这里插入图片描述

    (Tapdata Cloud 工作原理图)

    有朋友可能会担心这个云平台会不会把我要同步的数据泄露出去?

    从Tapdata Cloud 工作原理上可以看出:

    1. 同步实例节点单向连接管控端运行服务。 Tapdata agent实例节点对外不主动暴露网络信息,只会连接 TCM管理端服务,获取任务信息、上报状态信息。
    2. 用户部署的Tapdata agent实例节点和 TCM 通信链路采用 HTTPS 协议。
    3. 自建模式下,所有数据流转均发生在受用户管理的服务器和网络环境。
      可见,数据同步过程中数据泄露的问题大可不必担忧。

    三、全量同步和实时增量同步机制

    Tapdata Cloud 这款云同步工具支持全量同步和实时增量同步,实现的过程如下图所示:
    在这里插入图片描述


    四、源和目标

    据 Tapdata Cloud 最新版本,目前支持了:

    数据库版本作为源作为目标是否可用
    mysql5.x,8.x支持支持
    oracle9i, 10g, 11g, 12c支持支持
    sqlsever2005, 2008, 2012, 2014, 2016, 2017支持支持
    mongodb3.2, 3.4, 3.6, 4.0, 4.2支持支持
    PostgreSQL9.x, 10.x,11.x,12.x,13.x支持支持
    Elastic5.x, 6.x, 7.x暂不支持支持
    达梦数据库7,8支持支持
    Kafka2.3.x及以上暂不支持支持
    Redis2.x, 3.x, 4.x暂不支持支持即将上线
    DB29.7 LUW版本支持支持即将上线
    SybaseSybase ASE 15.7 及以上支持支持即将上线
    Gbase支持支持即将上线

    五、举例:Oracle 数据实时同步到 Elasticsearch

    一般需要做全文检索的时候,会将 Oracle 数据实时同步到 Elasticsearch。

    第一步:配置 Oracle 连接

    1. 点击 Tapdata Cloud 操作后台左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Oracle
      在这里插入图片描述

    1. 在打开的连接信息配置页面依次输入需要的配置信息
      在这里插入图片描述

    【连 接 名 称】:设置连接的名称,多个连接的名称不能重复
    【数据库地址】:数据库 IP / Host
    【端 口】:数据库端口
    【数据库名称】:tapdata 数据库连接是以一个 db 为一个数据源。这里的 db 是指一个数据库实例中的 database,而不是一个 schema。
    【账 号】:可以访问数据库的账号
    【密 码】:数据库账号对应的密码
    【时 间 时 区】:默认使用该数据库的时区;若指定时区,则使用指定后的时区设置

    第二步:配置 Elasticsearch 连接

    1. 同第一步操作,点击左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Elasticsearch
      在这里插入图片描述

    1. 在打开的连接信息配置页面依次输入需要的配置信息,配置完成后测试连接保存即可。
      在这里插入图片描述

    第三步:建立同步任务,以全量+增量同步举例
    进入Tapdata Cloud 操作后台任务管理页面,点击添加任务按钮进入任务设置流程
    在这里插入图片描述


    根据刚才建好的连接,选定源端与目标端。
    在这里插入图片描述


    根据数据需求,选择需要同步的库、表,如果你对表名有修改需要,可以通过页面中的表名批量修改功能对目标端的表名进行批量设置.
    在这里插入图片描述


    在以上选项设置完毕后,点击下方的全量+增量选项并点击确定按钮即可完成本次全量同步任务的配置,在点击确定后将自动返回任务管理页面,在任务管理页面中,点击右侧的启动按钮即可使Tapdata Agent 开始执行本次任务。在全量任务执行完毕后,Tapdata Agent 会自动进入增量同步状态。在该状态中,Tapdata Agent 会持续监听源端的数据变化(包括:写入、更新、删除),并实时的将这些数据变化写入目标端。

    在这里插入图片描述


    点击任务监控可以打开任务执行详情页面,可以查看任务执行的具体信息。
    在这里插入图片描述


    同理,其他数据库的同步操作也跟上面步骤一致,比如几个常用的场景是:
    • 从业务数据库到缓存数据库的实时同步
    • 不停机迁移数据库
    • 将主业务中心的数据实时同步至次业务中心
    • 构建只读实例
    • 构建异地灾备中心
    • 构建异地多活


    六、目标和源数据一致性

    很多人都担心同步的数据可能没法和源数据一致,Tapdata Cloud 提供了数据校验功能,包括快速count校验、表全字段值校验和关联字段值校验三种校验方式。
    • 快速count:仅对源表和目标表的行数进行count校验,速度极快,但是不会展示差异的具体字段内容。
    • 全表字段值校验:会对源表和目标表的全部字段进行逐行校验,能查出所有字段的差异,但是速度慢。
    • 关联字段值校验:只对源表和目标表的关联字段的值进行比对校验,速度快于全表字段值校验模式。
    校验操作步骤
    进入数据校验菜单,点击新建校验任务创建数据校验。
    【选择任务】:选择一个历史同步任务
    【校验类型】:可选 快速count校验、表全字段值校验和关联字段值校验
    【校验任务名】:默认与选择的同步任务名字一样
    【校验频次】:设置您的校验的执行频次
    【单次校验】:只执行一次校验
    【重复校验】:设置校验任务重复执行,支持设置校验执行的起止时间和校验间隔
    【错误数据保存条数】:当出现校验不一致的数据时,不一致数据保存的最大条数。该数值会影响到差异校验,当错误数据条数超出设置的保存条数时,将无法进行差异校验。
    【校验条件】:添加需要进行校验的表。点击自动添加会自动将任务下的所有表全部添加进来。

    快速count校验

    创建快速count校验时只需要选择到要校验的表,无需设置关联条件。
    在这里插入图片描述


    表全字段值校验

    除了要选择待校验表外,还需要针对每一个表设置索引字段。
    在这里插入图片描述


    在进行表全字段值校验时,还支持进行高级校验。通过高级校验可以添加JS校验逻辑,对源和目标的数据进行校验。

    在这里插入图片描述


    完整示例:以MongoDB查询示例

    JavaScript

    function validate(sourceRow){
        // 第1步
        var targetRow = target.executeQuery({database: "target",collection: "USER",filter: {USER_ID: sourceRow.USER_ID}});
        // 第2步
        if(sourceRow.USER_ID === targetRow[0].USER_ID){
            // 第3步
            return {result: 'passed',message: "",data: ""}
        }else{
            return {result: 'failed',message: "记录不一致",data: targetRow}
        }
    }
    

    在这里插入图片描述


    关联字段值校验

    创建关联字段值校验时,除了要选择待校验表外,还需要针对每一个表设置索引字段。
    在这里插入图片描述

    七、异构数据类型转换

    在异构数据库之间做同步,类型转换是一大难题,也是导致数据同步失败的重要原因,Tapdata Cloud 类型映射功能,在系统推演的基础上,提供了人工调整的能力,这一点比其他数据同步工具都更方便使用。
    在这里插入图片描述


    八、总结

    为了达到数据实时要求,并且不对源库造成干扰,首选 CDC 模式。
    现在市面上已经陆续出现了一些数据同步工具,完全没有必要自己撸代码了,免费的用起来不香吗?
    希望上文的实操图文,对你的数据库同步有帮助,有数据库相关的问题可以随时跟我交流!

    展开全文
  • 常用数据库validationQuery语句

    千次阅读 2018-04-15 15:22:16
    常用数据库valida常用数据库validationQuery语句tionQuery语句 在配置数据库连接池的时候,一个选项validationQuery,该选项用来验证数据库连接的有效性,下表是从网上收集的常用数据库的validationQuery语句。...

    常用数据库valida常用数据库validationQuery语句tionQuery语句

        在配置数据库连接池的时候,有一个选项validationQuery,该选项用来验证数据库连接的有效性,下表是从网上收集的常用数据库的validationQuery语句。

    数据库validationQuery
    Oracleselect 1 from dual
    DB2select 1 from sysibm.sysdummy1
    mysqlselect 1
    microsoft sqlselect 1
    hsqldbselect 1 from INFORMATION_SCHEMA.SYSTEM_USERS
    postgresqlselect version();
    ingresselect 1
    derbyselect 1
    H2select 1

    转载请注明:学时网 » 常用数据库validationQuery语句总结

    展开全文
  • 在配置数据库连接池的时候,一个选项validationQuery,该选项用来验证数据库连接的有效性,下表是从网上收集的常用数据库的validationQuery语句。     数据库 validationQuery ...
  • 常用数据库创建job

    千次阅读 2016-03-27 23:30:50
    前一段时间,为了早大批量的测试数据,就利用jop每天调用存储过程来实现,主要是对SqlServer和oracle二个数据库的job进行一个简单的总结: 一、SQLSERVER 1、使用“SQL Server Management Studio”工具登录数据库; ...
  • 常用图像数据库

    万次阅读 2016-01-12 11:17:32
    常用图像数据库 1,http://www.multitel.be/cantata/ 这个网址提供了大量的视频和图像的数据库下载索引,并相应的介绍,强烈推荐!大家慢慢去找寻自己的惊喜吧 2,...
  • 常用内存数据库介绍

    千次阅读 2011-09-09 17:36:09
    1. 内存数据库简介 1.1 概念 一、什么是内存数据库 传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-Resident Database)。磁盘数据库需要频繁地访问磁盘来进行数据的...
  • 皕杰报表连接常用数据库

    千次阅读 2009-08-18 14:12:00
    经常皕杰报表的试用者不知道如何将皕杰设计器连接自己的数据库,这里,我以Oracle为例,做一个详细说明。 第一步:配置数据库驱动 1、【窗口】—>【首选项】,打开首选项界面。 2、选择首选项界面左侧的【报表...
  • sql server 常用数据库恢复操作

    千次阅读 2010-06-21 11:29:00
    方式一: SQL Server数据库备份两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您能熟练...
  • SQL Server 数据库备份还原选项详解 5数据库应用与性能优化 SQL Server数据库备份还原是做为数据库管理员经常需要做的一件工作只有在 了安全的备份还原手段之后才能保证数据的相对安全所以每天做备份并定 期还原...
  • 常用内存数据库

    千次阅读 2014-12-04 06:10:58
    4.1.2 哪些场合适合使用其他的关系型数据库管理系统(RDBMS) · 客户端/服务器程序 如果你许多的客户端程序要通过网络访问一个共享的数据库, 你应当考虑用一个客户端/服务器数据库来替代SQLite. SQLite可以...
  • VFP数据库常用命令

    千次阅读 2018-04-02 21:10:53
    最近在使用vfp数据库,总结一些常用命令如下:1. Create Database <文件名>创建数据库,将创建到默认目录。2. Open Database <文件名>打开数据库。3. Close Database [All]关闭数据库。...
  • DB2数据库常用命令

    千次阅读 2020-05-12 11:08:47
    查看DB2数据库:db2 list db directory 查看DB2数据库应用:db2 list applications 查看DB2数据库应用与进程号:db2 list applications show detail 杀掉进程: db2 force application (id) 查看DB2数据库配置:...
  • 数据库基础(常用SQL语句)

    万次阅读 多人点赞 2019-10-07 13:49:59
    一、数据库级及SQL语言简介 1、目前主流数据库 微软:sql server、access 瑞典:mysql ibm: db2 sybase:sybase ibm: informix oracle: oracle 2、SQL语言 DQL-------------数据查询语言 select … From … Where DML...
  • 关系型数据库  关系数据库,是建立在关系模型基础上的...现如今虽然对此模型一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的
  • PostgreSQL 数据库跨版本升级常用方案

    千次阅读 2020-11-12 10:44:28
    本文介绍了 PostgreSQL 数据库版本升级的 3 种常用方案,包括通过 pg_dump/pg_dumpall 逻辑备份与还原进行升级,利用 pg_upgrade 工具进行升级,使用逻辑复制功能进行升级。了解它们的优缺点和适用场景可以帮助我们...
  • MySQL 数据库常用命令小结

    万次阅读 多人点赞 2010-01-04 21:52:00
    MySQL 数据库常用命令 1、MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show tables; 显示表 describe tablename; 表的详细描述 ...
  • kettle连接数据库需要相应的驱动这里面:oracle,mysql,sqlserver,access的驱动,以及连接access的方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,328
精华内容 72,131
关键字:

常用的数据库选项有哪些