精华内容
下载资源
问答
  • 本文主要讲述:解析视频编码技术原理,同时点出其使用场合,并给出相应的产品。 本文主要参考资料: 《一代高效视频编码H.265/HEVC:原理、标准与实现》,简称《原理》《H.265/HEVC视频编码:新标准及其扩展》...
    本文主要讲述:解析视频编码技术原理,同时点出其使用场合,并给出相应的产品。

    本文主要参考资料:
    1. 《一代高效视频编码H.265/HEVC:原理、标准与实现》,简称《原理》
    2. 《H.265/HEVC视频编码:新标准及其扩展》,简称《扩展》
    3. 《数字图像处理》冈萨雷斯版
    4. 《电视原理》姜秀华

    GOP:图像组
    技术解析:
    使用场合:
    相关链接:

    称之为编码单元等级:图像组GOP级、图像Frame级、片Slice级、宏块Macroblock级,
    这是《原理》的第三章:编码结构 的主要内容。
    相关链接:

    ROI:感兴趣区域
    技术解析:ROI下面的文章链接已经解析非常清楚了,具体请查看。
    使用场合:
    相关链接:
    1. 视频监控基础:什么是ROI智能视频编码

    QP:量化参数
    技术解析:量化参数QP作为码率控制的控制参数,在合理的速率-量化参数(R-QP)模型上,改变QP值,实现R的改变,达到速率控制(也就码率控制)
    使用场合
    相关链接:

    主码流/子码流:
    技术解析:
    使用场合:
    相关链接:
    1. 视频监控双码流技术: 主码流,子码流

    高级跳帧参考模式:
    技术解析:
    使用场合:
    相关链接:

    IPB帧:
    相关链接:什么是I帧,P帧,B帧 ,链接

    图像顺序计数(POC)
    解析:
    1. 编码顺序是指在图像有时域预测下,待编码图像先按照时域参考顺序进行帧重拍,再进入编码器编码,编码顺序正是编码器的码流顺序
    2. POC是已经解码图像的输出顺序,没幅图像都和一个图像顺序计数(POC)值相关联。
    链接:编码顺序、frame_num和POC,链接

    补充增强数据(SEI)、视频可用信息(VUI)
    以上两者,都不是编解码必须的参数,但它们有说明意义。
    补充增强信息机制为视频编解码器在比特流中提供了一些必要的元数据(用于图像输出定时、显示、差错检测和掩盖等目的)。确保在不同的HEVC系统中对补充数据有唯一的解析。

    HEVC的图像类型:
    解析:
    1. 265继承264的部分图像类型,又根据图像时域依赖关系,划分了时域子层;
    2. 理解HEVC的所有数据类型,需要理解:输出顺序、时域子层、解码顺序。
    参考书籍:
    《原理》 9.2
    《扩展》10.3-10.4

    HEVC的条和片划分:
    引入:
         在使用Hi3519的使用,发现有一些名称突然间对不起号,回头查看发现原来是对h.265的理解不够深入。同时,这也是3519获取码流的NALU包实际对应的图像上的条。一个条对应编码后成一个独立的NALU。
    解析:
         条划分将图像分为若干独立的编码部分(若干条、若干片),使得编码器可以独立解析、解码这些部分,以减轻传输差错给解码图像质量带来的损害。
         片划分主要是增强并行处理的能力,而不主要在于提供差错鲁棒性。片划分提供的是一种较简单的粗粒度(子图像)并行处理机制,它的使用不需要提供复杂的线程同步支持。正因为片划分的设计,所以可以提供ROI区域功能。
    参考:
    《扩展》3.4
    展开全文
  • 24中设计模式+1的定义以及使用场合

    千次阅读 2012-11-12 22:35:05
    使用场合 :  1. 如果希望一个系统独立于它的产品的创建 , 组合和表示的时候 , 换句话书 , 希望一个系统只是知道产品的接口 , 而不关心实现的时候 .  2. 如果一个系统要由多个产品系列中的一个来配置的时候 ....

     

    一.创建型模式(Creational):

    简单工厂模式(simpleFactory)发音:['simpl]['fækt(ə)rɪ]

           定义:

           提供一个创建对象实例的功能,而无须关心其具体实现.被创建实例的类型可以是接口,抽象类,也可以是具体的类.

     

    1.抽象工厂(AbstractFactory)发音:['æbstrækt]

           定义:

           提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类.

           使用场合:

           1.如果希望一个系统独立于它的产品的创建,组合和表示的时候,换句话书,希望一个系统只是知道产品的接口,而不关心实现的时候.

           2.如果一个系统要由多个产品系列中的一个来配置的时候.换句话说,就是可以,就是可以动态地切换产品簇的时候.

           3.如果强调一系列相关产品的接口,以便联合使用他们的时候

    .

    2.建造者模式(Builder)发音: ['bɪldə]

           定义:

           将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.

           使用场合:

           1.如果创建对象的算法,应该独立于该对象的组成部分以及它们的装配方式时

           2.如果同一个构建过程有着不同的表示时

     

    3.工厂方法模式(Factory Method)

           定义:

           为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到了子类.

           使用场景:

           1.客户类不关心使用哪个具体类,只关心该接口所提供的功能.

           2.创建过程比较复杂,例如需要初始化其他关联的资源类,读取配置文件等.

           3.接口有很多具体实现或者抽象类有很多具体子类时,

           4.不希望给客户程序暴露过多的此类的内部结构,隐藏这些细节可以降低耦合度.

           5.优化性能,比如缓存大对象或者初始化比较耗时的对象.

          

    4.原型模式(Prototype Method)发音: ['prəʊtətaɪp]

           定义:

           使用原形实例指定将要创建的对象类型,通过复制这个实例创建新的对象.

           应用场合:

           1.如果一个系统想要独立于它想要使用的对象时,可以使用原型模式,让系统只面向接口编程,在系统需要新的对象的时候,可以通过克隆原型来得到.

           2.如果需要实例化的类是在运行时刻动态指定时,可以使用原型模式,通过克隆原型来得到需要的实例.

     

    5.单例模式(Singleton) 发音:['sɪŋg(ə)lt(ə)n]

           定义:

           保证一个类仅有一个实例,并提供一个访问它的全局访问点.

           使用场合:

           当需要控制一个类的实例只能有一个,而且客户只能从一个全局访问点访问它时,可以使用单例模式,这些功能恰好是单例模式要解决的问题.

          

    .结构型模式(struct)发音:[strʌkt]

    6.适配器模式(Adapter)发音:[ə'dæptə]

           定义:

           将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.

           使用场合;

           1.如果先要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式,来把已有的实现转换成你需要的接口.

           2.如果你想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作,这中情况可以使用适配器模式,到时候需要什么就适配什么.

           3.如果你想使用一些已经窜在的子类,是不坑对每一个子类都进行适配,这中情况可以使用适配器模式,直接适配这些子类的父类就可以了.

     

    7.桥接模式(Bridge)发音: [brɪdʒ]

           定义:

           将抽象部分与它的实现部分分离,使他们可以独立变化.

           使用场合:

           1.如果你不希望在抽象部分和实现部分采用固定的绑定关系,可以采用桥接模式.

           2.如果出现抽象部分和实现部分都能够扩展的情况,可以采用桥接模式,让抽象部分和实现部分独立地变化.

           3.如果希望实现部分的修改不会对客户产生影响,可以采用桥接模式.

           4.如果采用继承的实现方案,会导致产生很多子类,对于这种情况,可以考虑采用桥接模式.

     

    8.组合模式(Composite)发音: ['kɒmpəzɪt]

           定义:

           将对象组合成属性结构以表示"部分-整体"的层次结构,组合模式使用的用户对单个对象和组合对象的使用具有一致性.

           使用场合:

           1.如果你想表示对象的部分-整体层次结构,可以使用..把整体和部分的操作统一起来,使得层次结构实现更简单,从外部来使用,这个层次结构也容易.

           2.如果希望同意地使用组合结构中的所有对象,可以选用...,这正是组合模式提供的主要功能.

     

    9.装饰器模式(Decorator Method)发音: ['dekəreɪtə]

           定义:

           动态的给一个对象增加一些额外的职责,就增加功能来说,装饰模式生成子类更为灵活.

           使用场合:

           1.如果需要爱不影响其他对象的情况下,以动态,透明的方式给对象添加职责,可以使用装饰模式.

           2.如果不适合使用子类来进行扩展的时候,可以考虑使用装饰模式.

     

    10.外观模式(Facade)发音: [fə'sɑ:d]

           定义:

           为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层的接口,这个接口使得这一子系统更加同容易使用.

           使用场景:

           1.如果希望为一个复杂的子系统提供一个简单接口的时候,可以考虑使用外观模式.使用外观对象来实现大部分客户需要的功能,从而简化客户的使用.

           2.如果想要让客户程序和抽象类的实现部分松散耦合,可以考虑使用外观模式,使用外观对象来将这个子系统与他的客户分离开来,从而提高子系统的独立性和可移植性.

           3.如果构建多层节后的系统,可以考虑使用外观模式使用外观模式对象作为每层的入口,这样可以简化层间调用,也可以松散出层次之间的依赖关系.

     

    11.享元模式(Flyweight)发音: ['flaɪweɪt]

           定义:

           运用共享技术有效地支持大量细粒度的对象.

           使用场合:

           1.如果一个应用程序使用了大量的细粒度对象,可以使用享元模式来减少对象的数量.

           2.如果犹豫使用大量的对象,造成很大的存储开销,可以使用享元模式来减少对象数量,并节约内存.

           3.如果对象的大多数状态都可以转变成外部状态,比如通过计算得到,或者从外部传入等,可以使用享元模式来实现内部状态和外部状态的分离.

           4.如果不考虑对象的外部状态,可以用相对较少的共享对象取代很多组合对象,可以使用享元模式来共享对象.然后组合对象来使用这些共享对象.

     

    12.代理模式(Proxy)发音: ['prɒksɪ]

           定义:

           为其他对象提供一种代理以控制对这个对象的访问.

           使用场合:

           1.需要为一个对象在不同的地址空间提供局部代表的时候,可以使用远程代理.

           2.需要按照需要创建开销很大的对象的时候,可以使用虚代理.

           3.需要控制对原始对象的访问的时候,可以使用保护代理.

           4.需要在访问你对象执行一些附加操作的时候,可以使用智能指引代理.

     

    .行为型模式(behavioral)发音[bi'heivjərəl]

    13.职责链模式(Chain Of Responsibility)发音: [tʃeɪn][rɪ,spɒnsɪ'bɪlɪtɪ]

           定义:

           使多个对象都有机会处理请求,,从而避免请求的发送者和接收者之间耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.

           使用场合:

           1.如果有多个对象可以处理同一个请求,但是具体由哪个对象来处理该请求,是运行时刻动态确定的.

           2.如果你想在不明确指定接收者的情况下,向多个对象中的其中一个提交请求的话,可以使用职责链模式.

           3.如果想要动态指定处理一个请求的对象结合,可以使用职责链模式.

     

    14.命令模式(Command)发音: [kə'mɑːnd]

           定义:

           将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作.

     

    15.解释器模式(Interpreter)发音: [ɪn'tɜːprɪtə]

           定义:

           给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.

           使用场合:

          

    16.迭代器模式(Iterator)

           定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示.

           使用场合:

           1.如果你希望提供访问一个聚合对象的内容,但是又不想暴露他的内部表示的时候,可以使用迭代器模式来提供迭代器接口,从而让客户端只是通过迭代器的接口来访问聚合对象,而无须关心聚合对象的内部实现.

           2.如果你希望有多种遍历方式可以访问聚合对象,可以使用...

           3.如果你希望为遍历不同的聚合对象提供一个统一的接口,可以使用....

     

    17.中介模式(Mediator)发音:['mi:dieitə]

           定义:

           用一个中介对象类封装一系列对象的交互.中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互.

           使用场合:

           1.如果一组对象之间的通信方式比较复杂,导致相互依赖,结构混乱,可以采用中介模式,把这些对象相互的交互管理起来,各个对象都只需要和中介者交互,从而是的各个对象松散耦合,结构也更清晰易懂.

           2.如果一个对象引用很多的对象,并直接跟这些对象交互,导致难以复用该对象,可以采用中介者模式,把这个对象跟其他对象的交互封装到中介者对象里面,这个对象只需要和中介者对象交互就可了.

     

    18.备忘录模式(Memento)发音: [mɪ'mentəʊ]

           在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.

           使用场合:

           1.如果必须要保存一个对象在某一个时刻的全部或者部分状态,方便以后需要的时候,可以把该对象恢复到先前的状态,可以使用备忘录模式.

           2.如果需要保存一个对象的内部状态,但是如果用接口来让其他对象直接得到这些需要保存的状态,将会暴露对象的实现希捷并破坏对象的封装性,这是可以使用备忘录.

     

    19.观察者模式(Observer)发音: [əb'zɜːvə]

           定义:

           定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.

           使用场合;

           1.当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化,那么就可以选用观察者模式,将这两者封装成观察者和目标对象,当目标对象变化的时候,依赖于它的观察者对象也会发生相应的变化.这样就把抽象模型的这两个方面分离了使得,它们可以独立地改变和复用.

           2.如果在更改一个对象的时候,需要同时连带改变其他对象,而且不知道究竟应该有多少对象需要被连带改变,这种情况可以选用观察者模式,被改的那一个对象很明显就相当于是目标对象,而需要连带修改的对歌其他对象,就作为多个观察着对象了.

           3.当一个对象必须通知其他的对象,但是你又希望这个对象和其他被它通知的对象是松散耦合的,也就是说这个对象其实不详知道具体被通知的对象.这种情况可以选用观察者模式,这个对象就相当于是目标对象,而被它通知的对象就是观察者对象了.

     

    20.状态模式(State)发音: [steɪt]

           允许一个对象在其内部状态改变是改变它的行为.对象看起来似乎修改了他的类.

           使用场合:

           1.如果一个对象的行为取决于它的状态,而且它必须在运行时刻根据状态来改变它的行为,可以使用...来包状态和行为分离开.虽然分离了,但是状态和行为是有对应关系的,可以在运行期间,通过改变状态,就能够调用到该状态对应的状态处理对象上去从而改变对象的行为.

           2.如果一个操作中含有庞大的多分枝语句,而且这些分支依赖于该对象的状态,可以使用....把各个分支的处理分散包装到单独的对象处理类中,这样,这些分支对应的对象就可以不依赖于其他对象而独立变化了.

     

    21.策略模式(Strategy)发音: ['strætɪdʒɪ]

           定义:

           定义一系列的算法,把它们一个个封装起来,并且使他们可以相互替换.本模式使得算法可独立于使用它的客户而变化.

           使用场合;

           1.出现有许多相关的类,仅仅是行为有差别的情况下,可以使用策略模式来使用多个行为中的一个来配置一个类的方法,实现算法动态切换

           2.出现同一算法,有很多不同实现的情况下,可以使用策略模式来把这些"不同的实现"实现成为一个算法的类层次.

           3.需要封装算法中,有与算法相关数据的情况下,可以使用策略模式来避免暴露这些跟算法相关的数据结构.

           4.出现抽象一个定义了很多行为的类,并且是通过多个if-else语句来选择这些行为的情况下,可以使用策略模式来替换这些条件语句.

     

     

    22.模版方法模式(Template Method)发音:['templeɪt;-plɪt]

           定义:

           定义在一个操作中的算法框架,把一些步骤推迟到子类去实现.模版方法模式让子类不需要改变算法的结构而重新定义特定的算法步骤

           功能:

           1.能够解决代码的冗余问题

           2.把某些算法步骤延迟到子类

           3.易于扩展

           4.父类提供了算法框架,控制了算法的执行流程,而子类不能改变算法的流程,子类的方法的调用由父类的模版方法决定.

           5.父类可以把那些重要的,不允许改变的方法屏蔽掉,不让子类去复写他们.

    1.需要固定定义算法骨架,实现一个算法的不变的部分,并把可变的行为留给子类来实现的情况.

           2.各个子类中具有公共行为,应该抽取出来,集中在一个公共类中去实现,从而避免复杂的代码重复

           3.需要控制子类扩展的情况.模版方法模式会在特定的点来调用子类的方法,这样只允许在这些点进行扩展.

          

           知识:

           回调:表示一段可执行逻辑的引用(或者指针),我们把该引用(或者指针)传递到另外一段逻辑(或者方法)里供这段逻辑适时调用

           (网站:redhat.iteye.com)

     

    23.访问者模式(Visitor)发音:['vɪzɪtə]

           定义:

           表示一个作用于某对象结构中的各个元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.

           使用场合:

           1.如果想对一个对象结构实施一些依赖于对象结构中具体类的操作,可以使用访问者模式.

           2.如果想对一个对象结构中的各个元素进行很多不同的而且不相关的操作,为了避免这些操作使类变得杂乱,可以使用访问者模式.

           3.如果对象结构很少变动,但是需要经常给对象结构中的元素定义新的操作,可以使用访问者模式.

           3.如果对象结构很少变动,但是需要经常给对象结构中的元素定义新的操作,可以使用访问者模式.

    展开全文
  • 它们的使用场合分别是? 1.1 目前市场上有些什么样的数据库管理系统(DBMS) 目前市场上的数据库管理系统(DBMS)常见的品牌有:Oracle、Sybase、Informix、Microsoft SQL Server、Microsoft Access、Visual ...

    1 要求

    目前市场上有些什么样的数据库管理系统(DBMS),它们都有什么特点?它们之间的优缺点有什么?它们的使用场合分别是?

    1.1 目前市场上有些什么样的数据库管理系统(DBMS)

    目前市场上的数据库管理系统(DBMS)常见的品牌有:Oracle、Sybase、Informix、Microsoft SQL Server、Microsoft Access、Visual FoxPro、PostgreSQL、mySQL、DB2、Ingres、MongoDB、达梦(DM)数据库。

    1.2 它们都有什么特点?它们之间的优缺点有什么?

    整体上可以把这些数据库分为商业数据库和开源数据库两类。当前主流的商业数据库有Oracle微软SQL ServerIBM DB2和SybaseAdaptive SQL Server。而在开源方面,主要有三家主流数据库:MySQL、PostgreSQL和Ingres。这两类数据库都已经证明了自己可以胜任数据存储和管理的需要。但相对于商业数据库,开源数据库可能是比较低的数据处理数量、缺少的功能、受限制的图形化管理,较低的安全性、或者是一些其他商业数据库有而开源数据库不具备的的东西。

    2 商业数据库和开源数据库总览

    2.1 商业数据库之Oracle

    Oracle是商业数据库的代表,具有非常丰富的功能、广泛的平台支持和大量的附加功能。在IDC的一个调查中,Oracle占据了数据库市场的44%,增长了14%。

    Oracle的功能从表分区和大量的统计功能,到一些高可用功能,诸如本地复制、数据镜像和应用集群(Real Application Clusters,RAC)等。

    Oracle另一个强大的功能是在线表和索引重建。在很多数据库中,需要离线进行重建,也就是说当索引被重建的时候,不允许访问数据,因为这个操作要求独占性访问对象。当然,这不是Oracle的全部功能,只是其所能提供的高级功能的一些示例。

    2.2 商业数据库之IBM DB2

    在2004年,DB2数据库的销售主要集中在IBM大型机和它们自己的AS/400系列系统中。尽管根据2006 IDC的调查报告,DB2的市场占有率高居第二位,但是与Oracle相比,它的销售额和市场占有率都要低很多。

    现在除了IBM的专有操作系统外,DB2可以运行在Windows、LinuxUnix平台上。新版的DB2 V9在XML处理方面具有较大的改进。在我最近的一个使用了其他数据库的项目中,在规划XML方面我们做了大量的额外工作。如果我们所使用的数据库具有 DB2 V9的相应功能,或许就不会有这么多麻烦了。

    另外,IBM正在通过其DB2 Everyplace进入移动领域,目前支持PDA和智能手机

    2.3 商业数据库之微软SQL Server

    一直以来,微软的SQL Server都只可以运行在其Windows操作系统平台上,但是在上一年的今天,也就是2016年的3月8日,宣布推出可运行在 Linux 系统下的 SQL Server 数据库。SQL Server的市场份额将会更快的增长。

    根据IDC的统计,微软的SQL Server是市场份额增长最快的数据库,市场份额仅次于DB2,排名第三。

    在最新版本的SQL Server 2005中,增加了许多新的功能,使其进一步对Oracle够成威胁。其中包括表分区、在线索引操作和很多其他管理功能。从下文中你将看到,很多用户对SQL Server的直观、易用的管理界面深表支持。

    2.4 商业数据库之Sybase

    最新版本的Sybase Adaptive Server与以前的版本相比,具有更丰富的功能设置,但是与上面Oracle和DB2两个商业数据库相比还是少很多,举个例子来说,它缺少对高可用群集和在线索引重建的支持。这或许是为什么在IDC的一次调查中,它仅排名第四,只有可怜的3.2%的市场份额。

    Sybase比较强大的地方在于它对资源的低占有率上。在这一方面,Sybase 15还引入了新的“专利查询过程技术”,显示了增强的性能和降低的硬件资源消耗。另一方面,Sybase正在通过其SQL Anywhere数据库服务器进入移动领域。SQL Anywhere功能之一就是其常驻内存的数据库管理系统,可以运行在Windows Mobile、Windows、Palm OSSymbian上。

    关于Sybase还有一个很有意思的历史插曲,微软的SQL Server是从Sybase开发而来的。微软和Sybase签订了一个合约,微软被授权可以销售一个重新包装的Sybase,或在它的基础上开发一个它自己的版本。尽管微软已经对其进行了很多修改,你依然可以在SQL Server的命令组成中看到两者之间的渊源。

    2.5开源数据库之MySQL

    MySQL是开源数据库中的佼佼者,它的用户数是在同类开源数据库中是最多的,它既可以被小的新兴公司所使用,也可以被采用了操作系统集群的大型Web站点所使用。

    MySQL拥有很多插入式的存储引擎,用来给用户提供不同的所需功能,而不是默认具有全部功能。这也是为什么MySQL会在数据恢复操作中具有最佳表现的另一个原因。

    自从MySQL第一版发布以来,就提供一个存储引擎接口。它让用户来根据需要选择数据存储引擎。MySQL既有事务安全(ACID兼容)的存储引擎(诸如InnoDB、Falcon),也有不支持事务处理的存储引擎(MyISAM)、日志引擎(不能被更新或删除,Archive)和通过无共享体系结构实现高可用性的群集技术, MySQL还有专有的第三方引擎,例如InfoBright和Nitro。

    MySQL拥有很多实现特定功能的存储引擎,但是并不建议你全部安装它们。而像Google这样的公司则编写了自己的存储引擎来加速它们的常用操作。

    MySQL与Oracle相比的一个优势就是它对资源的占用非常少。MySQL是实现数据恢复方面最快的数据库,但是它的确缺少一些在Oracle中的功能。

    MySQL从来没有想过与其他数据库在功能数量上一较高下,MySQL的目标是易用、稳定和性能。MySQL现在具有丰富的功能,已经得到了很多开发者的支持。

    2.5开源数据库之PostgreSQL

    在开源数据库中,PostgreSQL以其丰富的功能而显得格外突出,其中包括存储过程、表分区(partitioning)、多过程语言支持和多种数据类型和索引的支持。另外,PostgreSQL的标准兼容性和严格的安全功能也被众多用户所称道。PostgreSQL的在线事务处理(OLTP)是其最受欢迎的功能,在开源数据库中,它的数据仓库方面也是表现最好的。

    由于PostgreSQL是一个被不同公司支持的社区控制型开源项目,很多公司提供对它的支持,诸如Sun、Fujitsu、SRA和Red Hat和很多新兴公司和顾问公司。PostgrefSQL在日本的市场情况很不错,仅次于Oracle。

    2.7开源数据库之Ingres

    在Ingres 2006版中引入了很多新功能,其中一些功能是关于大规模部署方面的,例如键范围表分区(key range table partitioning)和并行查询支持。另外,诸如存储过程、触发器和视图功能早已被Ingres所支持,不过Ingres现在还不支持内部任务。

    2.8嵌入式数据库应用

    数据库的一个比较特别的应用案例是嵌入式应用程序,在这方面应用中,低资源占用成为一个必需的要求。

    MySQL由于其设计理念,在这一方面被应用的比较多。微软的SQL Server 2005 Express版也被做为嵌入式数据库使用,它被认为是微软数据库引擎(MSDE)的下一版本,而且它也是完全免费的。而Oracle则又通过收购得来的 TimesTen内存数据库来满足嵌入式应用程序。

    Linux是开源数据库的首选操作系统,因为它们都是开源而且完全免费的产品。现在的消费电子产品市场中,Linux变种已经被广泛应用。而这也使得开源数据库们在嵌入式应用程序受益。

    3对这些数据库管理系统的使用场合分别是什么?

    这个问题,我想以“如何选择适合自己的数据库的方式?”来回答。

    3.1按需求来选择

    事实上,现在没有完美无缺的数据库,无论是商业数据库,还是开源数据库。我们发现,选择一个数据库的主要理由就是它的功能是否可以很好地支持你的应用程序。人们通常使用数据库来完成的任务有:支持Web、事务处理、文本搜索,有的情况下复制也是一个重要的要求。在事务处理方面,Oracle看上去更有领先优势,接下来是微软的SQL Server。没有一个开源数据库具有可以与Oracle相媲美的事务处理功能。

    在那些要求功能丰富的情况下,开源数据库们并不比商业数据库有什么优势。人们经常提到的商业数据库的优势功能有存储过程、触发器和一些安全功能。

    不过,正如我们上面提到过的,自从Ingres问世以来就支持触发器和存储过程。PostgreSQL对这些功能也早已支持。在MySQL的新版中最近也增加了存储过程和触发器功能。对于支持Web应用程序,MySQL看上去要比其他对手表现好。Web应用程序主要是对数据库进行读取操作。MySQL在这方面以速度快而见长。一些用户表示,在快速阅读操作方面,MySQL至少不比Oracle差。但是,当任务从阅读数据库转向处理一个客户购买操作的时候,用户则可能更倾向于选择Oracle而不是MySQL。在复制和群集功能上,MySQL给人的印象差别很大。MySQL中的单向复制表现惊人,但是,MySQl的群集功能被应用的不多,因为它只是基于内存的。

    3.2按易用性和管理来选择

    开源数据库们主要是以命令行工具中管理。尽管也有一些图形工具可用,但是与Oracle等商业数据库自带的图形管理工具相比,它们还显得不够灵活和稳定。在图形化管理方面的赢家无疑是微软。微软的SQL Server管理工具不是基于浏览器的,而是自带的一个终端平台。这使得它有能力完成一些Web浏览器所不能实现的强大功能。一些用户希望Oracle中的管理功能也和SQL Server中一样好。

    3.3按支持性来选择

    当讨论开源软件的时候我们听到最频繁的问题是:“我们从哪儿能得到支持?”MySQL为它自己的客户提供24*7、30分钟响应时间的支持。在其Unlimited服务中还有很多不同的付费支持级别。正如上面所提到的,PostgreSQL的支持来自于不同的平台厂商,支持的内容、成本、地区和要求因厂商不同而不完全一样。由于开源数据库的源代码可以被任何人查看和修改,这导致了几个潜在的问题。一个合法客户对数据库进行了修改会发生什么?Sun公司不会对这种情况提供支持,而MySQL公司将提供支持,但是需要满足一些特定条件和情况。事实上,能对这些开源产品进行修改的客户的数量是非常少的——这与产品的复杂度有关系。另一个开源软件的问题是,任何人可以对产品进行修改的现实会带来一些潜在的漏洞或安全问题。诸如此类的事情已经发生过,客户需要确信从熟悉的网站下载这些产品,并且确认它们可以通过MD5校验。

    3.4按成本因素来选择

    数据库中成本因素是非常简单的。对于开源数据库,你可以免费得到授权,但是同时也牺牲了一些功能。而对于商业数据库,你可以使用更多强大的功能,但是你需要按每个拷贝或每个CPU来支付授权费用。对于开源数据库,在维护成本方面,尽管看上去你可以选择不从厂商那儿购买支持合同,因为你拥有源代码,但是实际上并不如此简单。

    虽然你可以选择修改源代码,但是当新版数据库出来后,你所做的修改不得不重新进行实施,而且你曾经所做的修改可能已经没有必要,因为新版中增加了相应的功能。对我们来说,唯一比较实际的做法就是成为这个数据库开发社区中的一员,这可能需要你投入大量的时间,其成本或许会超过购买一个支持合同。对于商业数据库,你只有面临一个选择,如果你想得到来自它们的维护支持,那么就购买它们的支持合同。

    4结论

    总体来说,选择什么样的数据库要看你的应用程序的需要。如果它是以阅读数据库为主的Web应用,MySQL无疑是最佳选择。而如果需要那些事务处理和复杂的数据库功能,那么可能是Oracle和微软的SQL Server的地盘。如果你需要一些商业数据库的高级功,但又不想支付授权费用,那么看一下PostgreSQL或Ingres。对于嵌入式数据库应用, MySQL和Sybase所占有的系统资源最少。

     

    展开全文
  • 本文转载,因网上版本几乎都是转载,故不...大部分情况下,“给定场景下应该使用这两个产品中哪个”这个问题,大家都会容易决定,而且不需要多少讨论。我为什么要拿出来讨论一下:一些场景会比较模糊,觉得都可以使用

    本文转载,因网上版本几乎都是转载,故不知道哪个才是原版。
    重点是共享知识!

    在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品2年,了解了这2个产品的实现及应用对这两个产品的用法。

    大部分情况下,“给定场景下应该使用这两个产品中哪个”这个问题,大家都会容易决定,而且不需要多少讨论。

    我为什么要拿出来讨论一下:

    一些场景会比较模糊,觉得都可以使用。这时需要知道产品缺点,而不是看到优势。
    一些新人会觉得产品功能是可以替换的,要给说明一下。
    这里简单说一下两者的区别。

    系统结构

    RPC系统结构:

    +———————————–+
    | Consumer | <=> | Provider |
    +———————————–+
    Consumer调用的Provider提供的服务。

    Message Queue系统结构:

    +—————————————————+
    | Sender | <=> | Queue | <=> | Receiver |
    +—————————————————+
    Sender发送消息给Queue;Receiver从Queue拿到消息来处理。
    RPC系统结构:

    +———————————–+
    | Consumer | <=> | Provider |
    +———————————–+
    Consumer调用的Provider提供的服务。

    Message Queue系统结构:

    +—————————————————+
    | Sender | <=> | Queue | <=> | Receiver |
    +—————————————————+
    Sender发送消息给Queue;Receiver从Queue拿到消息来处理。

    功能特点

    在架构上,RPC和Message的差异点是,Message有一个中间结点Message Queue,可以把消息存储。

    消息的特点

    Message Queue把请求的压力保存一下,逐渐释放出来,让处理者按照自己的节奏来处理。
    Message Queue引入一下新的结点,让系统的可靠性会受Message Queue结点的影响。
    Message Queue是异步单向的消息。发送消息设计成是不需要等待消息处理的完成。
    所以对于有同步返回需求,用Message Queue则变得麻烦了。

    RPC的特点

    同步调用,对于要等待返回结果/处理结果的场景,RPC是可以非常自然直觉的使用方式。
    RPC也可以是异步调用。
    由于等待结果,Consumer(Client)会有线程消耗。
    如果以异步RPC的方式使用,Consumer(Client)线程消耗可以去掉。但不能做到像消息一样暂存消息/请求,压力会直接传导到服务Provider。

    适用场合说明

    希望同步得到结果的场合,RPC合适。
    希望使用简单,则RPC;RPC操作基于接口,使用简单,使用方式模拟本地调用。异步的方式编程比较复杂。
    不希望发送端(RPC Consumer、Message Sender)受限于处理端(RPC Provider、Message Receiver)的速度时,使用Message Queue。
    随着业务增长,有的处理端处理量会成为瓶颈,会进行同步调用到异步消息的改造。

    这样的改造实际上有调整业务的使用方式。

    比如原来一个操作页面提交后就下一个页面会看到处理结果;改造后异步消息后,下一个页面就会变成“操作已提交,完成后会得到通知”。

    不适用场合说明

    RPC同步调用使用Message Queue来传输调用信息。 上面分析可以知道,这样的做法,发送端是在等待,同时占用一个中间点的资源。变得复杂了,但没有对等的收益。

    对于返回值是void的调用,可以这样做,因为实际上这个调用业务上往往不需要同步得到处理结果的,只要保证会处理即可。(RPC的方式可以保证调用返回即处理完成,使用消息方式后这一点不能保证了。)

    返回值是void的调用,使用消息,效果上是把消息的使用方式Wrap成了服务调用(服务调用使用方式成简单,基于业务接口)。

    补记,关于解耦讨论

    微博上 inter12 的一些讨论,觉得很有意义补记下来。

    inter12:这两者可以拿来比较,但是个人感觉并不是同一个层面的问题。RPC是分布式服务之间调用的一种解决方案,是我们在做架构设计决策时同分布式对象,REST等层面的东西比较,决策的一个方案! 消息系统更多是我们为了解决系统之间的解耦,以及性能问题等方面所考虑的方案! 说的有些乱,望鼎哥指点下。

    oldratlee:回复@inter12:你说到很多关键点了,“分布式对象”“解耦”“性能”,这些都可以用来看两者的差异。 如果从两个机器间数据的传递(调用、消息都是数据)角度看,两者效果相同,区别只是使用方式、技术指标:同步异步(比如 是否等反馈 )、数据是否暂存、强弱类型(比如 有独立的业务方法,数据类型)等等

    inter12 提到了“解耦”,“解决系统之间的解耦”使用消息时大家常常说到的一点,一个重要权衡方面!

    个人觉得,“解耦”不如“暂存”,是消息相对RPC的关键区别,原因说明如下:

    消息的解耦特征,主要体现在:

    消息的发送者,不需要关心接收者的信息。 服务通过注册中心也可以做到,即服务调用者到注册中心查询服务提供者信息,调用者不需知道。
    消息的发送者,不用关心可以发个几个关心的消息组件。
    这一点RPC可以通过服务编排做到。

    展开全文
  • RPC和MQ对比及其适用/不适用场合

    万次阅读 2016-06-21 16:14:26
    大部分情况下,“给定场景下应该使用这两个产品中哪个”这个问题,大家都会容易决定,而且不需要多少讨论。 我为什么要拿出来讨论一下: 一些场景会比较模糊,觉得都可以使用。这时需要知道产品缺点,而不是...
  • 函数式编程的特性和适用场合

    千次阅读 2010-01-05 10:52:00
    函数式编程的特性和适用场合 作者:Justin James翻译:PurpleEndurer,2010-01-05第1版 前言 函数式编程(Functional programming,FP)也许能解决你遇到的某些开发问题。如果你正考虑在工作中使用函数式编程,...
  • redis 数据类型详解 以及 redis适用场景场合 目录[-] 1、显示最新的项目列表 2、删除与过滤 3、排行榜相关 4、按照用户投票和时间排序 5、处理过期项目 6、计数 7、特定时间内的特定项目 8、...
  • XML文件的好处及适用场合

    千次阅读 2011-03-19 17:41:00
    文件的适用场合: 1 、数据交换 用 XML 在应用程序和公司之间作数据交换已不是什么秘密了,毫无疑问应被列为第一位。那么为什么 XML 在这个领域里的地位这么重要呢 ? 原因就是 XML 使用元素和属性来描述数据...
  • 如果程序员和产品经理都用凡尔赛文学对话......

    万次阅读 多人点赞 2020-11-21 16:16:21
    现在我觉得静电容的键盘也还行,手感也是挺好的 产品经理유:我也不喜欢使用机械键盘,按键的声音太大。有时早起工作时会吵到旁边睡觉的妹纸 程序员웃:双十一血拼结束,入手一块RTX4000,那打游戏真是太爽了。前端...
  • LWIP使用经验

    万次阅读 多人点赞 2014-05-17 11:46:38
    LWIP使用经验 介绍了LWIP的工作原理,移植到RTOS,重点讲解了TCP知识,总结了使用LWIP的经验,最后给出常见问题与解答。
  • 产品经理的私房菜 排版篇

    千次阅读 多人点赞 2021-02-06 19:25:56
    产品经理的私房菜 排版篇 「初稿|木深、木小深」 「编辑|牟深、Sam、Ella」 排版的意义 ❝ 「与其暧暧内含光」 「不如光彩夺目地大放异彩」 ❞ 在这个看脸的世界,颜值已然成为时下评断他人第一印象时...
  • 如何从产品层面做产品定位,界内用到的是——产品定位五步法分析,那怎样在五步之内做出正确产品定位呢?
  • 作为一名在职岗位为【前端开发工程师】的程序员,我开发的应用程序经常需要获取用户位置信息,需要再某些场合使用展示地图以及地图商的某些地点,需要获取行政区划列表(省市区)以及地址详情信息,需要在地图上...
  • 大部分情况下,“给定场景下应该使用这两个产品中哪个”这个问题,大家都会容易决定,而且不需要多少讨论。 我为什么要拿出来讨论一下: 一些场景会比较模糊,觉得都可以使用。这时需要知道产品缺点,...
  • AMD公司的灵魂Athlon产品回忆录

    千次阅读 2012-08-30 14:58:23
    指令集(这是AMD发布的针对三维建模和效果渲染等三维应用场合性能增强的指令集,可以大幅度提高CPU的3D处理性能)及100MHz的前端总线频率(FSB),最初的时钟频率为266MHz,后增到475MHz,带有64KB的一级缓存,二级...
  • 嵌入式产品开发流程

    万次阅读 2017-04-21 10:11:14
    嵌入式产品,与普通电子产品一样,开发过程都需要遵循一些基本的流程,都是一个从需求分析到总体设计,详细设计到最后产品完成的过程。但是,与普通电子产品相比,嵌入式产品的开发流程又有其特殊之处。它包含嵌入式...
  • 产品读书《设计心理学1-4》-设计

    千次阅读 2016-12-27 10:58:51
    诺曼在这套书里面谈到,设计本质不是创意,而是设计者与使用者的沟通,是要让用户一眼就看得懂产品,知道怎么使用。所以一个好的设计,一定是兼顾了可视性和易懂性。 简单来说,好的设计就是让用户一看就知道这个...
  • 产品体验报告:在行APP分析

    千次阅读 2018-09-03 22:47:42
    1 产品概述 1.1体验环境 设备型号:iPhone 6p 操作系统:iOS 11.4.1 体验版本:v3.8.0 体验时间:2018.07.20-2018.08.12 2 市场分析 2.1 目标用户 从360趋势可以得出性别比例相差不大,用户人群年龄集中在19...
  • 电气产品报价单模板

    千次阅读 2017-09-08 11:27:17
    模拟电气产品和多路转换器的作用主要用于信号的切换,目前集成模拟电子电气产品在小信号...电气产品应急电源主要是为消防应急而研制的,能够在主要的场合、消防供电回路结尾等灵活运用。电气产品应急电源的关键是中央
  • 本文主要介绍Cisco的交换机产品线和主要产品。  一、概述  <br />Cisco的交换机产品以“Catalyst”为商标,包含1900、2800、2900、3500、4000、5000、5500、6000、 8500等十多个系列。总的来...
  • 产品设计

    千次阅读 2014-11-04 13:57:20
    产品设计是一个由抽象的概念到具体形象化的处理过程,通过文字或图像等方式将我们规划的产品需求展现出来。它将产品的某种目的或需求转换为一个具体的物理或工具的过程,把一种计划、规划设想、问题解决的方法,通过...
  • 产品开发中项目与项目管理

    千次阅读 2016-06-08 19:29:46
    之前提到产品立项之前会有需求的采集、分析和筛选,需求的采集主要从定性与定量,说与做四个维度进行,需求分析需要将用户需求转化为产品需求,确定需求基本属性、分析商业价值,编写BRD,评价实现难度和计算性价比...
  • protobuf在java, Android下的使用总结

    千次阅读 2018-07-21 17:25:58
    protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库(类似Json),但相比于Json...但这个库目前使用还不是太流行,据说谷歌内部很多产品都有使用。 Protobuf的优点 1,性能好,效...
  • 使用id引用超链接

    千次阅读 2009-09-16 11:43:00
    今天在做网站页面的时候发现,在超链接中也可以使用id来引用,例如用在这样的场合: 在一些电子商务网站的产品页面的图片会有一个链接,用于在新页面查看产品的图片,html代码: 
  • 上一篇文章中我们讲解了App的数据统计,其主要分为两种:使用第三方服务统计和自身实现数据统计。一般而言我们使用第三方统计服务已经可以很好的满足我们的也无需求了,只是部分数据敏感性App,可能自身实现数据统计...
  • 亚马逊如何进行快速的创新?在可用性方面,为了超越靠猜测行事,你必须去观察用户如何使用你的软件,除此之外别无他法!
  • 《人人都是产品经理》读书笔记

    万次阅读 2014-11-27 09:18:21
    1. 写给-1到3岁的产品经理 1.1 为什么要做产品经理 1.对于一个产品,用户总是分为新手、专家和中间用户   2.用好产品来改变世界   1.2 我们到底是不是产品经理 1.产品就是用来解决某个问题的东西   2.产品经理...
  • 使用Jmeter进行性能测试的基本操作方法

    万次阅读 多人点赞 2017-12-05 10:58:31
    Jmeter是一款轻量型的优秀测试软件产品,在很多场合如个人测试,企业测试中都有广泛应用。相比体积巨大的Lr我们在某些场合可能更倾向于对Jmeter的使用,那么我们要如何利用该软件进行性能测试呢?首先我们需要下载...
  • WiFi产品的一般射频电路设计

    万次阅读 多人点赞 2015-05-30 10:50:26
    在这篇文章中,我只是分析研究了Wi-Fi产品的一般射频电路设计,而且主要分析的是Atheros 和Ralink的解决方案,对于其他厂商的解决方案并没有进行研究。 这是一篇针对性很不强的技术文章。在这篇文章中,我研究,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,554
精华内容 26,621
关键字:

产品使用场合