精华内容
下载资源
问答
  • 1.0电机的分类及永磁同步电机的控制技术介绍 基础的电磁感应产生力的作用,这类似的初中物理知识不再讨论; 与直流无刷及永磁同步电机知识太发散的就不再讨论; 本文介绍的几点内容 电机的分类及日常生活...

    1.0电机的分类及永磁同步电机的控制技术介绍

    • 基础的电磁感应产生力的作用,这类似的初中物理知识不再讨论;
    • 与直流无刷及永磁同步电机知识太发散的就不再讨论;

    本文介绍的几点内容

    1. 电机的分类及日常生活中的电机类型
    2. 无刷直流/永磁同步电机的运行原理
    3. 无刷直流与永磁同步的异同
    4. 永磁同步电机的控制技术

    1.电机的分类及日常生活中的电机类型

    电机种类
      如图中所示,电动机的种类,可以首先按照交直流类型来区别。
      直流电动机在日常生活中遇到的非常多,用电池或5V电源作为能量的几乎都是,电动玩具、剃须刀、小风扇。这类电机的分类在换向式的细分类别中。控制手段也非常简单,两极上通电就能转,电压给的越大转的越快,两根电极线对调就能反转。如果曾经拆开过玩具四驱车里面的直流有刷电机就会记得,里面有个II型的两极电刷,转子的电流换向就是靠电刷来完成。这类电机,也会发现里面有磁铁存在,磁极是固定不动的,作为定子。其他细分支的单极式电机、换向电励磁式电机,生活中不太常见,不作介绍了。
      交流电动机分为两类,同步电动机和异步电动机。
      异步电动机在普通日常生活中见的相对较少,都相对较为大型。单相的异步电动机,在农村家里的各类加工机器、普通的小型工厂里的加工机器上会见的比较多;使用的电源就是普通的市电220V就行,一零一火线就可以工作运行。单相异步电机的更细分类型,差别就不是那么大了,这类电机上常常会有两个非常大的电容:启动电容、工作电容。如果这两个电容坏了,启动或工作的时候就会异常。
      多相异步电动机,在起重机械、大型加工机械上会见的非常多;多相异步电机的体积在这所有电机分类中都相对较大,功率也都不低。使用这类电机大都配有相应的变频器。其供电时会接入三相电。三相电在工业中常用,但日常生活不常见。
      最后介绍交流电动机的同步电动机。这类电机的细分种类在日常生活中会多少有些影子。同步电动机主要分为四类,无刷直流、永磁同步、步进电机、磁滞电机、磁阻电机。无刷直流电机,一提到,都见过;日常使用的电动自行车、电摩的后轮,就是一种直流无刷同步电动机。这种电机还有一种称呼叫轮毂电机,就是指长在车轮的轮毂上的电机。步进电机的应用非常广泛,主要是因为其控制的步进精度,使得可以用在高精度的场合。激光切割,3D打印中都用的蛮多的。
      还有一种分支的电机类型,永磁同步电机。这种电机,当前,有一个非常火的应用,昂贵的那款吹风机就是永磁同步电机的。永磁同步电机结合优良的控制方法,可使得电机的转速精确可控,噪声非常低,给人静音静躁并且高效的感觉。
      同步电机大多是永磁式的。其他励磁类型的也有,但不常见了。

    2.无刷直流/永磁同步电机的运行原理

      这里一起阐述无刷直流和永磁同步运行原理的原因是因为这两类的区别着实不大,后文会详细对比异同的。
      直流有刷电机,定子是永磁体,转子是绕线线圈;磁性有两极,同斥异吸。所以,在转子线圈中通上直流电,则能让转子转动,直到与定子力矩最小的位置;这时由于电刷换向,本来力矩最小的位置又成了力矩最大;最后,周而复始,转子不断旋转。
      无刷直流,那就确实没有电刷;同时,直流有刷电机中定子为永磁体,转子为绕线的结构,在直流无刷中变成了定子为绕组,转子为永磁体。如果绕组依然在转子上面,那还得靠物理接触给绕组通电,没有解决掉电刷老化的问题。直流无刷电机中,绕组在定子中存在,有三根相线;工作的时候,相继的给三根相线输入输出电流,变达到了换向的目的。直流无刷中,转子定子由于电磁生力的作用与直流有刷是相同的。
      无刷直流电机,具体是定子在内部还是在外部,不一定。转子在外,定子在内的,一般称为外转子电机。轮毂电机就是很特殊的外转子电机。
      直流无刷电机,为什么在大分类下却又是交流电机?
      是因为,我们在给无刷直流、永磁同步电动机的控制器供电的时候,供给的是直流电源,所以称呼为了无刷直流;但是,直流电源经由电机控制器,逆变之后,在与电机相连的三根相线上,电源类型变成了交流,交流变化的相电压才能使电机三根相线上的电流不停换向,所以电机的分类是交流电动机。

    3. 无刷直流与永磁同步的异同


    • 无刷直流电机,英文BLDC,英文全称Brushless Direct Current Motor
    • 永磁同步电机,英文PMSM, 英文全称 Permanent Magnet Synchronous Motor

    这两种电机类型要作以区别,最根本的原因是因为气隙磁场的设计就不同。所以产生了以下的不同

    1. 反电势波形不同:
      BLDC :近似梯形波(理想状态);
      PMSM :正弦波(理想状态);
    2. 三相电流波形不同:
      BLDC :近似方波或梯形波(理想状态);
      PMSM :正弦波(理想状态);
    3. 控制系统的区别:
      BLDC:通常包括位置控制器、速度控制器和电流(转矩)控制器;
      PMSM:不同控制策略的会有不同的控制系统;
    4. 控制不同:
      BLDC:120度方波电流,采用PWM控制;
      PMSM:正玄波电流,采用SPWM SVPWM控制。

      但是,在实际的控制中,直流无刷也会用FOC控制,永磁同步电机也能用方波进行控制。
      就像电动车的控制器,我拆来研究过三四个,接口都是一样的,控制芯片不一样,当然控制算法也不一样。用正弦波控制的电动车,启动、运行声音都很低,运行过程中没有抖动;但是方波控制的电动车,声音会非常明显,运行时的抖动也能感知得到。抖动是因为明确的转矩脉动。
      方波控制的电机,电源使用效率较高,因为正弦波控制的电机,在有效电压上就会被打折一点。

    4. 永磁同步电机的控制技术

    永磁同步电机,直流无刷电机可以用同样的控制手段来使之运行。

    • 根据有无位置传感器来区别,首先分为有感无感。也就是有无使用霍尔等类似的位置传感器来感知定子转子的位置角度。在风泵类的应用中,很多使用无感方式控制,通孔优良的算法是电机运转起来后,检测感知相电流的变化来切换相电流。一些重载或精确控制的应用中,都会使用有感方式。
    • 根据逆变的三相电源,可以分为方波控制和正弦波控制。方波控制策略简单,控制过程直接有效,采用六步换向策略,CPU调制 出PWM来驱动功率开关管就可是生成能使电机运转的三相电源。正弦波的控制策略相对复杂得多,但是在控制效果上又优良的多。
    • 正弦波控制时,主要有两种控制策略。
      一种是,直接转矩控制DTC百度百科。其作法是依量测到的马达电压及电流,去计算马达磁通和转矩的估测值,而在控制转矩后,也可以控制马达的速度,直接转矩控制是欧洲ABB公司的专利。
      第二种是,空间矢量控制FOC百度百科。其实质是将交流电动机等效为直流电动机,分别对速度,磁场两个分量进行独立控制;通过控制转子磁链,然后分解定子电流而获得转矩和磁场两个分量,经坐标变换,实现正交或解耦控制。
    • 正弦波控制时,会有很多衍生的更精细的控制策略,比如前馈控制、最大转矩控制、弱磁控制等。
    • 在对电机的控制过程中,会有多个反馈控制环。在控制电机的出力情况时,有电流环;再此基础上,控制转速的控制环;伺服电机应用时,便有位置环的控制。

    ST的开源方案–空间矢量控制,驱动永磁同步电机的学习及分享计划CSDN链接

    展开全文
  • 针对传统主备同步技术可靠性低,同步速率低问题,提出了一种新主备数据同步解决方案。新主备同步方案使用了可靠主备数据同步通道;提出给同步数据分类,并采用合适方法同步。经实验验证,该技术方案应用在...
  • 简要介绍了电网信号交流采样的分类,重点分析了采用软件实现同步交流采样的工作原理和误差来源,并结合DSP技术给出一种基于TMS320F24X芯片的软件同步采样处理系统的实现方案,给出了软件设计流程。同时讨论了减少误差及...
  • JAVA线程同步技术

    2020-12-24 12:49:42
    1、同步技术分类 1.1 关键字 ● synchronized ● volatile 1.2 类方法 ● Object: wait、notify、notifyAll ● Thread: sleep、join、yield 2、synchronized monitor:分为对象监视器和类监视器,不同类型监视器加锁...

    1、同步技术分类
    1.1 关键字

    • synchronized
    • volatile

    1.2 类方法

    • Object: wait、notify、notifyAll
    • Thread: sleep、join、yield

    2、synchronized
    monitor:分为对象监视器和类监视器,不同类型监视器加锁互不影响
    作用域:方法体,代码块
    用于方法之上,对该实例对象或类的monitor加锁

    public synchronized [static] void fun(...)
    

    用于代码块,对实例对象或类的monitor加锁

    public void fun(...) {
     synchronized(obj) { // synchronized(this) or synchronized(class)
     ...
     }
    }
    

    竞争monitor举例

    • 线程各自获取monitor,不会有等待
      synchronized(class) //对类的monitor加锁
      synchronized(this) //对对象的monitor加锁

    • 如果不同线程监视同一个实例对象就会等待,如果是不同的实例则不会等待
      synchronized(this) //对对象的monitor加锁
      synchronized(this) //对对象的monitor加锁

    • 如果不同线程监视同一个类就会等待,如果是不同的类则不会等待
      synchronized(class) //对类的monitor加锁
      synchronized(class) //对类的monitor加锁

    3、volatile
    轻量级同步机制,主内存(main memory),工作内存(cpu cache),可见性,原子性

    在开始讨论类方法线程同步之前,我们再次回顾下线程状态

    4、JAVA线程状态
    ● 新建状态(New)
    新创建了一个线程对象。

    ● 就绪状态(Runnable)
    线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中, 只需等待获取CPU的使用权 ,即在就绪状态的线程除CPU之外,其它运行所需资源都已全部获得。

    ● 运行状态(Running)
    就绪状态的线程获取了CPU。

    ● 阻塞状态(Blocked)
    阻塞状态是线程因为某种原因放弃CPU使用权暂停运行,直到线程进入就绪状态,才有机会转到运行状态。 阻塞的情况分三种:

    • 等待阻塞
      运行的线程执行wait()方法后,该线程会 释放占用的所有资源 ,JVM会把该线程放入“等待池”中。进入这个状态后不能自动唤醒,必须依靠其他线程 调用notify()或notifyAll()方法才能被唤醒 。

    • 同步阻塞
      运行的线程在获取对象的同步锁时,若该 同步锁被别的线程占用 ,则JVM会把该线程放入“锁池”中。

    • 其他阻塞
      运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待的线程终止或超时、I/O处理完毕时,线程重新转入就绪状态。

    ● 死亡状态(Dead)
    线程执行完或者因异常退出了run()方法,该线程结束生命周期。

    5、类方法
    5.1 Object类

    • wait
      调用wait方法会让当前线程 放弃该对象的对象锁 ,并进入对象锁的等待锁定池,直到被notify或notifyAll唤醒继续执行,或者被中断; 调用前提是需要先获得该对象锁 ,因此需要将wait调用置于同步块synchronized(obj)之内。

    • notify / notifyAll
      notify-随机唤醒一个等待的线程,notifyAll-唤醒全部等待的线程; 调用notify()后,并不会立即释放锁,而是继续执行当前代码,直到synchronized中的代码全部执行完毕; notify有两个问题:一是唤醒的线程当前不一定需要获得该锁,二是可能造成死锁。 例子:三个人吃苹果,一个削两个吃。 注意:wait/notify/notifyAll都必须放在synchronized方法或块中执行 ,否则会抛IllegalMonitorStateException 异常.

    5.2 Thread类

    • sleep
      当线程调用了自身的sleep()方法或其他线程的join()方法,进程 让出CPU ,然后就会进入阻塞状态(该状态停止当前线程,但并不释放所占有的资源,即调用sleep ()后,线程 不会释放“同步锁”)。 当sleep()或join()结束后,该线程进入可运行状态,继续等待OS分配CPU时间片。

    • join
      把指定的线程加入到当前线程,直到指定线程执行结束或者等待一定时间后,才继续往下执行。 原理:调用指定线程的wait方法释放monitor。

    • yield
      放弃当前获得的CPU时间片,回到就绪状态,执行yield()的线程有可能在进入到可执行状态后马上又被执行。

    sleep与wait 比较

    • 异:sheep不会释放对象的同步锁,而wait会;
    • 同:两者都支持中断,即在sleep与wait期间,都可以通过interrupt调用让它们立即抛出InterruptedException异常。
      public static native void sleep(long millis) throws InterruptedException;
      public final native void wait(long timeout) throws InterruptedException;

    6、线程同步工具
    6.1 Concurrent包

    • Semaphore
      计数信号量,功能是限制同时获得许可的数量,通过阻塞(acquire)、释放(release)来管理许可的发放与回收。

    • ReentrantLock
      可重入的互斥锁,与synchronized有相同的并发性和内存语义,但功能更强大。

    • BlockingQueue
      阻塞队列,提供了阻塞接口put和take,分别在队列为满和为空时自行阻塞,直到满足要求后继续执行,其实现依赖ReentrantLock。

    • CountDownLatch
      倒记数锁,使一个线程在一组线程未全部执行完之前一直等待,直到计数到达0。计数只能减不能增,也不能重置,如果需要重置,可考虑用CyclicBarrier代替。

    • CyclicBarrier
      循环壁垒/屏障,允许一组线程在到达某个公共屏障点之前互相等待,可多次使用。

    6.2 Atomic包:

    • AtomicInteger
      一个线程安全的整数封装类,可以在并发情况下安全的设置/获取对象的值。 源码分析

    6.3 Lock(ReentrantLock)与Synchronized比较

    • 同:ReentrantLock 与synchronized有相同的并发性和内存语义
    • 异:synchronized是在JVM层面实现的,而ReentrantLock使用代码实现。
      synchronized机制强制所有锁获取和释放均要出现在一个块结构中,当获取了多个锁时,它们必须以相反的顺序释放,只要线程运行的代码超出了synchronized语句块范围,锁就会被释放。而ReentrantLock对锁的占有和释放是显示的,使用稍显复杂相比synchronized但更加灵活。

    使用建议:在并发量比较小的情况下,使用synchronized是个不错的选择,但是在并发量比较高的情况下,其性能下降很严重,此时ReentrantLock是个不错的方案。

    7、线程同步应用:生产者-消费者模型

    • 实现一、synchronized + Object.wait/notifyAll
    • 实现二、ReentrantLock.Condition
    • 实现三、BlockingQueue

    8、术语

    • monitor
      监视锁,同步锁,每个java对象和类在逻辑上都有唯一的一个monitor,任何时候都最多只能有一个线程占用这个同步锁;释放方法:wait。

    • 可见性
      是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。

    • CAS
      Unsafe类的compareAndSwapxxx方法。

    • 互斥锁
      所谓互斥锁, 指的是一次最多只能有一个线程持有的锁,过程中有上下文的切换,cpu的抢占,信号的发送等开销。

    • 自旋锁
      线程一直处于运行中,死循环检测锁的标志位。自旋锁是一种非阻塞锁,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取自旋锁直到获得。

    9、参考资料:

    • http://blog.csdn.net/wulei_longhe/article/details/30032031
    • http://blog.csdn.net/zolalad/article/details/38903179
    • http://blog.csdn.net/monkey_d_meng/article/details/6251879
    展开全文
  • 作者: 刘心光 来自:小米云技术背景MySQL由于自身简单、高效、可靠特点,成为小米内部使用最广泛数据库,但是当数据量达到千万/亿级别时候,MySQL相关操作会变非常迟缓;如果这时还有实时BI展示需求,...

    作者: 刘心光 来自:小米云技术

    背景

    MySQL由于自身简单、高效、可靠的特点,成为小米内部使用最广泛的数据库,但是当数据量达到千万/亿级别的时候,MySQL的相关操作会变的非常迟缓;如果这时还有实时BI展示的需求,对于mysql来说是一种灾难。

    为了解决sql查询慢,查不了的业务痛点,我们探索出一套完整的实时同步,即席查询的解决方案,本文主要从实时同步的角度介绍相关工作。

    早期业务借助Sqoop将Mysql中的数据同步到Hive来进行数据分析,使用过程中也带来了一些问题:

    • 虽然Sqoop支持增量同步但还属于粗粒度的离线同步,无法满足实时性的需求
    • 每次同步Sqoop以sql的方式向Mysql发出数据请求也在一定程度上对Mysql带来一定的压力
    • 同时Hive对数据更新的支持也相对较弱

    为了更有效地连接前端业务数据系统(MySQL)和后端统计分析系统(查询分析引擎),我们需要一套实时同步MySQL数据的解决方案。

    小米内部实践

    如何能够做到数据的实时同步呢?我们想到了MySQL主从复制时使用的binlog日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗时间

    下面来看一下MySQL主从复制的原理,主要有以下几个步骤:

    1. master(主库)在每次准备提交事务完成数据更新前,将改变记录到二进制日志(binary log)中
    2. slave(从库)发起连接,连接到master,请求获取指定位置的binlog文件
    3. master创建dump线程,推送binlog的slave
    4. slave启动一个I/O线程来读取主库上binary log中的事件,并记录到slave自己的中继日志(relay log)中
    5. slave还会起动一个SQL线程,该线程从relay log中读取事件并在备库执行,完成数据同步
    6. slave记录自己的binlog
    43bcfeb9c5da1e28f4ff6aac58059e37.png

    binlog记录了Mysql数据的实时变化,是数据同步的基础,服务需要做的就是遵守Mysql的协议,将自己伪装成Mysql的slave来监听业务从库,完成数据实时同步。

    结合小米内部系统特点,构建了Mysql数据同步服务–-LCSBinlog,作为一种独立的数据接入方式整合在Talos Platform中,Talos Platform作为大数据集成的基础解决方案,以自研消息队列Talos为数据总线,连接各种系统为主要目标,提供丰富的数据Source输入和数据Sink输出,并且Talos天然支持流式计算,因此业务可以充分利用Talos Platform互联互通的特性,并结合自身的业务需求实现更加高阶的业务场景。

    be0956eaf861347176722f7cacf4ef7f.png

    上图是Talos Platform中的整体流程架构,其中标红部分是目前LCSBinlog在小米内部使用最广泛的一条链路:Mysql ---> Talos ---> Kudu ---> BI,数据同步到kudu后借助Sparksql查询引擎为上层BI系统提供即席查询服务,Kudu和Sparksql的整合细节可以参见往期内容:告别”纷纷扰扰”—小米OLAP服务架构演进

    LCSBinlog服务的主体架构

    服务一共有两种角色

    Master :主要负责作业的调度,

    Worker: 主要完成具体的数据同步任务

    在Worker上运行两种作业:

    1. BinlogSyncJob:每一个mysql库都会对应这样一个Job,将binlog日志完整地写入到服务创建的Talos topic中
    2. MysqlSyncJob:同步历史数据,消费binlog数据,过滤特定库表数据实时同步至用户配置的topic中

    服务整体依赖于Zookeeper来同步服务状态,记录作业调度信息和标记作业运行状态;在kudu表中记录作业同步进度

    6de047a44a0607b97914bd9e2a07a96b.png

    控制流程如下:

    1. Worker节点通过在Zookeeper上注册告知自己可以被调度
    2. 通过在Zookeeper上抢占EPHEMERAL临时节点实现Master的HA
    3. 用户在融合云(Web)上注册BinlogSource同步任务
    4. Master周期性从配置服务读取Binlog同步作业配置
    5. Master更新Zookeeper中的调度信息
    6. Worker节点 根据Zookeeper上的调度信息启动新分配任务,停止配置失效任务;作业启动后完成数据实时同步并周期性将同步进度记录在kudu中
    7. 服务上报监控信息到Falcon平台,作业异常退出发送报警邮件

    如何保障数据正确性

    >>>>顺序性

    用户配置的每一个BinlogSource 都会绑定一个Talos的topic,在进行消费的时候需要保证同一条mysql记录操作的顺序性,消息队列Talos是无法保证全局消息有序的,只能保证partition内部有序。

    对于配置分库分表或者多库同步任务的BinlogSource,服务会根据库表信息进行hash,将数据写入相应的partiton,保证同一张表的数据在一个partition中,使得下游消费数据的顺序性;

    对于单表同步的作业目前使用一个partition保证其数据有序。

    >>>>一致性

    如何保证在作业异常退出后,作业重新启动能够完整地将mysql中的数据同步到下游系统,主要依赖于以下三点

    1. 服务会记录作业同步的offset,重启后从上次commit的offset继续消费
    2. Binlog数据的顺序性保证了即便数据被重复消费(未commit的数据),也能对同一条记录的操作以相同的顺序执行
    3. 下游存储系统kudu,Es ,Redis基于主键的操作能够保证binlog重复回放后数据的最终一致性

    应用场景

    有了这份数据我们可以做些什么事情呢,本节例举了几种常见的应用场景

    >>>>实时更新缓存

    业务查询类服务往往会在mysql之上架设一个缓存,减少对底层数据库的访问;当mysql库数据变化时,如果缓存还没有过期那么就会拿到过期的数据,业务期望能够实时更新缓存;

    利用binlog服务,根据策略实时将数据同步到redis中,这样就能够保证了缓存中数据有效性,减少了对数据库的调用,从而提高整体性能。

    51768324b2fd766338e55c500852dae8.png

    >>>>异步处理,系统解耦

    随着业务的发展,同一份数据可能有不同的分析用途,数据成功写入到mysql的同时也需要被同步到其他系统;如果用同步的方式处理,一方面拉长了一次事务整个流程,另一方面系统间也会相互影响

    数据在mysql中操作成功后才会记录在binlog中,保证下游处理到时的一致性;使用binlog服务完成数据的下发,有助于系统的解耦

    关于异步处理,系统解耦在消息队列价值思考一文中有更深入的解读

    >>>>即席查询的BI系统

    就如文章开篇提到的,mysql在一定场景下的性能瓶颈,mysql数据同步到kudu后可以借助sparksql完成性能的提升

    因为同样是sql接口,对使用者的切换成本也是较低的,数据同步到更适合的存储中进行查询,也能够避免因大查询而对原mysql库其他查询的影响

    目前小米内部稳定运行3000+的同步作业,使用binlog服务同步数据到kudu中;小米内部BI明星产品XDATA借助整套同步流程很好地支持了运营、sql分析同学日常统计分析的需求

    如何使用Binlog数据

    用户接入数据的时候要求mysql库开启binlog日志格式必须为Row模式:记录的是每一行记录的每个字段变化前后的值,虽然会造成binlog数据量的增多,但是能够确保每一条记录准确性,避免数据同步不一致情况的出现

    最终通过监听binlog日志,LCSBinlog服务将数据转换成如下的数据结构,写入用户注册的Topic中, 目前Sink服务使用SparkStreaming实时转储数据到kudu中,后续也将逐步迁移到Flink上以提升资源利用、降低延迟

    3ceefc5b2170ccf934bae588dec1bf12.png

    业务用户也可以根据我们提供的数据格式,实时消费Talos数据以实现更复杂的业务逻辑,下表为每一种数据操作,是否保存修改前后的列表

    cc99b2b639913f36a6f435d26b8379ae.png

    疑难杂症

    下面分享2个上线后遇到的有趣问题

    >>>>数据不一致问题,业务使用唯一索引

    业务接入一段时间后, 发现部分表会偶尔存在kudu表的数据条目数多于同步的mysql表的数据条目数,我们将多出来的数据与mysql产生的binlog日志经过一一对比,发现用户在mysql表中设置了唯一索引,通过唯一索引修改了主键,而kudu中的数据是通过主键标识或更新一条记录的,于是update操作变成了insert操作,这就造成了原来的1条记录变成了2条。

    解决办法:对于这种类型的表,LCSBinlog服务会把一次Update操作转换成一条Delete数据和一条Insert数据

    >>>>Full Dump同步历史数据时,客户端超时

    服务刚上线的时候,通过jdbc 执行sql的方式完成全量历史数据的同步,在同步的过程中会发现dump任务会卡顿很长时间才会返回结果,当数据量很大会出现超时同步失败的情况,会造成数据的延迟。调研后发现使用mysql官方jdbc在客户端查询数据的时候,默认为从服务器一次取出所有数据放在客户端内存中,fetch size参数不起作用,当一条SQL返回数据量较大时可能会出现OOM

    解决办法:当statement设置以下属性时,采用的是流数据接收方式,每次只从服务器接收部份数据,直到所有数据处理完毕。优化后历史数据同步稳定运行,对mysql端的压力也很小

    9a4bbe0d3ac69c54941d5ff1471f2cc1.png

    总结

    MySQL以Binlog日志的方式记录数据变化,基于流式数据的Change Data Caputre (CDC)机制实现了LCSBinlog服务,

    本文主要对LCSBinlog的服务架构、应用场景以及在小米内部的实践经验进行了介绍,也和大家分享了我们实际中遇到的问题和解决方案,希望能够帮助到大家理解服务的原理,带来启发,也欢迎大家和我们一起交流。

    展开全文
  • 因此伺服电机指是随时跟随命令进行动作一种电机,是以其工作性质命名,概念上和“直流电机”“异步电机”“同步电机”这些常见以电机驱动方式来分类的方式不一样,注意不要混肴。  伺服电机可使控制速度,...
  • 线程同步技术线程同步通信技术传统线程同步通信技术线程同步  感谢张孝祥老师,下面是我看了他视频之后自己模仿他写出来代码,以前很多面试题都有这道题,也看了网上一些答案,那些答案真很混乱很难看...
    
    

    感谢张孝祥老师,下面是我看了他的视频之后自己模仿他写出来的代码,以前很多面试题都有这道题,也看了网上的一些答案,那些答案真的很混乱很难看懂,张老师的设计思想把它简单化了,一份优雅的代码让我们很轻松地就理解了,重要的是领教了他的这种设计思想。

     

     

    package com.thread.test;


    /**

     * @fileName ConditionCommunication.java

     * @description 传统线程同步通信技术,子线程循环10次,接着主线程循环100次,又回到子线程循环10次,接着再回  * 到主线程又循环100次,如此循环50次

     * 

     * @date  2012-2-25

     * @time 16:55

     * @author wst

     *

     */

    public class ConditionCommunication {


    public static void main(String[] args) {

    final Business b=new Business();

    new Thread(new Runnable(){

    @Override

    public void run() {

    for(int i=1;i<=50;i++){

    b.sub(i);

    }

    }

    }).start();

    //因为mian方法本身就占用一个线程,所以主线程不需要再newThread

    for(int i=1;i<=50;i++){

    b.main(i);

    }

    }


    static class Business{

    private boolean b=true;

    //子线程循环10次,休息,唤醒下一个线程

    public synchronized void sub(int i){

    while(!b){

    try {

    this.wait();//是当前线程休息

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    }

    for(int j=1;j<=10;j++){

    System.out.println("j:"+j+"  i:"+i);

    }

    b=false;

    this.notify();//唤醒下一个线程

    }

    //主线程循环100次,休息,唤醒下一个线程

    public synchronized void main(int i){

    while(b){

    try {

    this.wait();//是当前线程休息

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    }

    for(int j=1;j<=100;j++){

    System.out.println("j:"+j+"  i:"+i);

    }

    b=true;

    this.notify();//唤醒下一个线程

    }

    }

    }


    展开全文
  • 摘要: 主要阐述在C++语言环境中编程,实现通过OPC SERVER自定义同步方式访问PLC中数据的技术。 关键词: C++;OPC;自定义;同步 中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2011)0210071-01 0 ...
  • FPGA同步设计技术.pdf

    2010-06-28 11:39:39
    本文介绍了FPGA 的同步设计技术, 结合一些设计实例总结了FPGA 同步设计 若干原则。  关键词: FPGA; 同步设计; 时钟  中图分类号: TN 79 文献标识码:B
  • SQL 2005中的同步复制-按文中提到方式测试成功(2009-03-23 21:01:58)转载标签:杂谈分类:SQLSERVER管理 计算机名修改之后,做复制时报错,错误如下: SQLServer复制需要有实际服务器名称才能连接到...
  • 背景技术:分类算法就是基于分类器模型为待检测样本从可选的分类中选取最佳的类别假设,它属于人工智能中机器学习范畴,已经吸引了该领域相关研究者的极大关注。人们投入了大量的时间和精力研究诸如C4.5、支持向量机...
  • 摘要:负载均衡作为提高网站性能的主要方式被大多数网站采用,文中概述了现有的负载均衡技术的分类与各自特点。  动态内容按照存在形态可以分为三类。  第一类:内容长时间不需变化,这类内容一般是通过网页静...
  • MFC多线程及同步技术

    2014-08-05 21:25:59
    MFC线程分类  工作者线程 - 主要用于后台耗时操作,通常没有用户界面。  用户界面线程 - 拥有独立用户界面 工作者线程使用  首先实现线程回调函数,函数原型:UINT MyControllingFunction( ...
  • 同步多线程(SMT)是一种在一个CPU 时钟周期内能够执行来自多个线程指令硬件多线程技术。本质上,同步多线程是一种将线程级并行处理(多CPU)转化为指令级并行处理(同一CPU)方法。 同步多线程是单个物理...
  • 时间同步技术的分类 时间同步技术的应用场合 传统与挑战 NTP 双向报文交互 不能用在WSN中的原因 GPS 挑战 典型时间同步机制 WSN中的同步时延分析 DMTS (Delay Measurement Time Synchronization) RBS ...
  • 永磁电机有多种分类方法,根据输入电机接线端电流种类可分为,永磁直流电机和永磁交流电机。由于永磁交流驱动电机没有电刷、换向器或集电环,因此也可称为永磁无刷电机,根据输入电机接线端交流波形,永磁无刷...
  • 摘要: 多线程同步技术是计算机软件开发的重要技术,本文对多线程的各种同步技术的原理和实现进行了初步探讨。 关键词: VC++6.0; 线程同步;临界区;事件;互斥;信号量; 正文 使线程同步
  • 创造力的分类:机器学习技术在发散思维EEG数据中的应用 《本文同步发布于“脑之说”微信公众号,欢迎搜索关注~~》 有研究表明,更大的脑电α功率(8-13Hz)是更有创造力的个人和任务的特征。本研究调查了机器学习对...
  • 针对信息化校园建设中数据库同步问题,在分类总结当前数据库同步技术及同步方案各自特点基础上,提出了一种数据库同步方案,并对其中方案进行了设计。
  • 系统集成技术分类

    2020-10-09 22:30:23
    它不依赖于语言和平台,便可以实现不同语言间相互调用,通过Internet进行基于Http协议网络应用间交互,多用于同步通信模式。 JMS是一个Java平台中关于面向消息中间件(MOM)API,用于在两个应用程序之间,...
  • 人们以经典电磁学为理论基础,把不便于定量...小位移通常用应变式、电感式、差动变压器式、涡流式、霍尔传感器来检测,大位移常用感应同步器、光栅、容栅、磁栅等传感技术来测量。其中光栅传感器因具有易实现数字化、
  • 2014/09/11 09:39:01 分类: 技术随笔 1人评论 次浏览 SAE 只允许用户通过phpMyAdmin管理远程数据库, 在做本地SAE环境开发时候是是分不方便. 因此写了点代码能够方便将远程数据库同步到本地来. ...
  • 互联网大型网站技术人员岗位划分与管理 1. 技术中心岗位分类目的 为了科学公平合理分配资源、有计划缩短技术...在设备档次提升同时,同步提升技术管理水平,为人力资源、科技资源成本计算和精确调度创造条件
  • 同步通信是按照软件识别同步字符来实现数据的发送和接收,异步通信是一种利用字符的再同步技术的通信方式。  同步通信  同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步...
  • 不久前用到了同步,现在回过头来对JAVA中的同步做个总结,以对前段时间工作的总结和自我技术的条理话。 JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块...
  • 续……高压电动机起动方式和起动技术 (1)电动机起动装置分类按照电动机额定电压等级,与其配套起动装置可分为低压软起动装置和高压软起动装置,也就是常用400V软启动器和6KV与10KV软起动器。按照电动机...
  • 数据同步技术即不同系统间数据流转,如: 同类型不同集群间同步: ① 主数据库与备份数据库之间数据同步 ② 主系统与子系统之间数据同步 大数据系统数据同步: ① 业务系统到数据仓库系统 ② 数据仓库系统到数据服务...
  • 1 永磁同步电机1.1 驱动电机类型电动机按其工作电流分类,可分为直流电动机和交流电动机。长期以来,直流电动机由于成熟稳定调速技术优点,广泛应用在工业过程中,但其结构复杂、故障率高,不能满足离散动态环境...
  • 不久前用到了同步,现在回过头来对JAVA中的同步做个总结,以对前段时间工作的总结和自我技术的条理话。JAVA的synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 994
精华内容 397
关键字:

同步技术的分类