精华内容
下载资源
问答
  • 对比原理概念
    千次阅读 多人点赞
    2020-02-28 18:16:02

    数据库原理这门课已经学了一周多了,基础概念知识比较多,也比较杂,下面整理一下,也算是增加一点记忆。

    **

    数据库的四个基本概念

    **
    数据(Data):数据是描述事物的符号记录,数字,文字,图像,音频,视频,学生的档案记录等,都可以叫做数据。数据有其自己的含义,称为数据的语义,数据与其语义是不可分的。

    数据库(Database): 数据库是长期储存在计算机内,有组织的,可共享的大量数据的集合。

    数据库管理系统(DBMS): 一种位于用户与操作系统之间的一层数据管理软件。是计算机的基础软件,也是一个大型复杂的软件系统。有着以下功能:1.数据定义功能;2.数据组织、存储和管理;3.数据操纵功能;4.数据库的事务管理和运行管理;5.数据库的建立和维护功能;6.其它一些功能。

    数据库系统(DBS): 由数据库,数据库管理系统(及其应用开发工具),应用程序和数据库管理员(DBA)组成的存储,管理,处理和维护数据的系统。

    **

    概念模型中的一些术语

    **
    实体(Entity): 客观存在并可相互区别的事物,比如具体的人、事、物或抽象的概念。

    实体型(Entity Type): 用实体名及其属性名集合来抽象和刻画同类实体。例如:学生(学号,姓名,系别)。

    实体集(Entity Set): 同一类型实体的集合。

    实体之间的联系(Relationship): 现实世界中事物内部及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。实体之间的联系通常是指不同实体集之间的联系。实体之间的联系有一对一、一对多和多对多等多种类型。

    **

    关系模型

    **
    在这里插入图片描述
    以此表为例:
    关系(Relation): 一个关系对应通常说的一张表。

    属性(Attribute): 表中的一列为一个属性,给每一个属性起一个名称即属性名。如表中的学号,姓名等。

    域(Domain): 是一组具有相同数据类型的值的集合。属性的取值范围来自某个域。如性别的域是(男,女),年龄属性的域为(1—120)等。

    元组(Tuple): 表中的一行即为一个元组。如表中一个学号对应的一行。

    码(Key): 表中的某个属性组,可以唯一确定一个元组。如表中的学号可以唯一确定一个学生,也就是此关系的码。

    分量: 元组中的一个属性值。

    关系模式: 对关系的描述。关系名(属性1,属性2,…,属性n)。

    直观对比
    在这里插入图片描述
    **

    数据库系统的三级模式及其优点

    **
    三级模式包括模式(Schema)外模式(External Schema)内模式(Internal Schema).
    数据库管理系统在三级模式之间又提供了两层映像:外模式 / 模式映像模式 / 内模式映像
    在这里插入图片描述
    一个数据库只有一个模式,只有一个内模式,一个模式可以对应多个外模式,同样,一个外模式也可以对应多个应用。

    优点: 数据库系统的三级模式是数据的三个抽象级别,它把数据的具体组织留给数据库管理系统管理,使用户能逻辑的、抽象的处理数据,而不必关心数据在计算机中的具体表示方式与存储方式。

    具体解释:

    模式(Schema): 也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。是数据库系统结构模式的中间层。

    外模式(External Schema): 也称子模式用户模式。是数据用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。介于模式与应用之间。
    外模式是保证数据库安全性的一个有力措施。

    内模式(Internal Schema): 也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。

    数据定义语言和数据操纵语言: 这个我真不知道😭
    详见数据定义语言(DDL) 和数据操纵语言(DML)

    **

    数据与程序的物理独立性和逻辑独立性,以及数据库系统具有数据与程序的独立性的原因。

    **
    逻辑独立性: 当模式改变时,由数据库管理员对各个外模式/模式映像做相应改变,可以使外模式保持不变。应用程序是根据数据的外模式编写的,从而应用程序不必修改,即保证了数据与程序的逻辑独立性。

    物理独立性: 当数据库的存储结构改变时,由数据库管理员对模式/内模式映像做相应改变,可以使模式保持不变,从而应用程序也不用改变,即保证了数据与程序的物理独立性。

    原因: 数据与程序之间的独立性使得数据的定义和描述可以从应用程序中分离出去。并且,由于存取由数据库管理系统管理,从而简化了应用程序的编制,减少了应用程序的维护和修改。

    更多相关内容
  • 人脸支付技术原理和基本概念介绍

    千次阅读 2019-06-04 08:25:24
    2019-06-02 21:31:57 ...近日,支付宝蜻蜓、微信青蛙以及人行牵头银联和各商业银行推进落地的刷脸支付系统陆续开始推向市场,笔者近期分别对相关产业各方采用的技术原理和基本概念进行了一些学习和研...

    https://www.toutiao.com/a6697925553745297923/

     

    2019-06-02 21:31:57

    人脸支付技术原理和基本概念介绍

     

    从2015年,马云在德国展示人脸支付技术以来,经过几年发展,人脸支付已经开始走向商用。近日,支付宝蜻蜓、微信青蛙以及人行牵头银联和各商业银行推进落地的刷脸支付系统陆续开始推向市场,笔者近期分别对相关产业各方采用的技术原理和基本概念进行了一些学习和研究,在此做一下记录和分享。

    什么是人脸支付技术

    人脸支付技术是利用受理终端的人脸采集能力,通过人脸识别技术(1:1 or 1:N)获取持卡人支付账户信息,结合Token技术、PIN加密技术、大数据分析等形成的新型支付技术。人脸支付技术通常涉及两个方面,一方面是人脸支付受理终端,一方面是人脸支付受理平台。

    从人脸支付受理终端侧来看,主要涉及:人脸图像采集及检测技术、人脸图像预处理技术、活体检测等。从平台侧来看,主要涉及:人脸图像特征提取技术、人脸图像匹配与识别技术。

    人脸支付技术原理和基本概念介绍

     

    人脸支付技术中涉及的一些关键技术概念和原理

    从上述的几项技术中,我们需要首先了解下面的这些关键技术概念和原理。

    什么是双目摄像头

    人脸支付技术原理和基本概念介绍

     

    支付宝蜻蜓采用的摄像头

    我们通常使用的在手机上用于拍照的前置摄像头,都是普通的可见光VGA摄像头,也叫单目摄像头,所以单目摄像头一般需要通过动作配合、行为分析等模式实现活体检测。而双目摄像头是指设备上除了一个可见光VGA的摄像头外,还有另外一个或多个用于采集视觉的部件(如黑白摄像头、长焦/定焦摄像头、近红外摄像头、结构光组件、TOF组件等)。这也是我们看到在我们一些高端手机、支付宝蜻蜓和微信青蛙提供的摄像头中采用的一些技术。

    一般人脸识别中用到的是近红外摄像头、结构光组件、TOF组件等。具体的形式上可能有多个部件组成。双目摄像头通过采集物体的深度数据,与VGA摄像头采集的2D平面照片数据组合成物体的3D模型,所以又称之为3D摄像头。双目摄像头在满足基本人像信息采集的同时,还能提供快速(<1s)、高精度的活体检测能力,判断采集的物体是否是真人活体。

    为什么人脸支付首次需要输入手机号

    人脸支付技术原理和基本概念介绍

     

    这其实就是我们人脸识别中的一个经典问题,也就是1:1模式和1:N模式。1:1的模式是指用现场采集的某客户的图像与之前系统中留存的该客户图像直接进行对比,这样就需要用一个索引在后台留存的数据中先找到该客户的图像,比如手机号或者PIN等。而1:N的模式是指用现场采集的某客户的图像与在系统中留存的N个人照片里逐一比对,找到库里那个当前客户的图像,并且获得相应的关联信息,如捆绑的卡号或者支付账号,这就好比大海捞针,在茫茫人海中去找到这一张图像。在N的规模如果达到比较大的程度时(一般像微信支付宝后台都是亿级用户),识别的准确度会急剧下降,识别的效率也会大受影响。

    所以通常情况下,首次支付会采用手机号或者PIN作为图像的索引,采用1:1模式,快速索引出人脸,而在再次到店支付时,可以使用1:N模式,在本地不多的缓存客户图像中直接匹配,提高客户体验度。

    人脸支付应用于支付场景的特殊性

    这其实也是很多专家在评论人脸支付时谈到的问题,首先,人脸识别是一种相似度识别,跟采用的算法以及设定的阈值有很大关系,单纯靠人脸识别这一项技术是不能完全满足支付主体唯一性的要求的,所以势必还得添加其他辅助手段;其次,人脸特征一方面可以随身携带并且易于获取,本身就是一种非常好的支付载体,但是与传统的密码和卡不一样的是,人脸特征如果作为支付中的一个重要因素,一旦出现风险,无法进行作废、挂失、更换等操作。

    人脸支付的欺诈手段和防范措施

    欺诈手段-照片、视频、3D面具

    这方面技术从低到高,有照片、视频、3D面具。照片和视频都可以通过合法途径获取,比如可通过网上个人主页、微信朋友圈、街边偷拍等途径获得。而另据报道,日本有公司已经能生产3D打印面具,如下图所示。

    人脸支付技术原理和基本概念介绍

     

    防范措施-活体检测

    通常的防范措施就是采用活体检测技术,大家在日常生活中已经有所体验。简单来讲,跟进行活体检测的摄像头有关。如果是单目摄像头,一般采用指令动作配合的方式,如人脸左转、右转、张嘴、眨眼等,指令配合错误则认为是伪造欺骗,这种方式由于其负责性一般只能用于一些绑卡环节而不适用于支付环节。如果是双目摄像头,一般是利用双目摄像头得到的深度数据进行3D模型分析, 最终判断出这个人脸是来自活体还是非活体。采用这种方式对于2D攻击也就是照片和视频有较好的防范效果,但对于3D模型攻击,例如上面这种3D面具或者头套的防范效果还需要进一步优化。特别是对于精度较高的3D头套或蜡像的攻击,目前很难进行分辨。

    总结

    相信大家看了本文,对人脸支付技术原理和概念有了一个初步的认识和理解。后续我们将展开为大家分别来分享支付宝蜻蜓、微信青蛙以及银联系的人脸支付的具体方案。

    展开全文
  • 针对势能原理有限元方法中单元刚度矩阵的显示表达问题,从基面力的慨念出发,利用单元刚度矩阵显示表达式,建立了基于基面力概念的势能原理有限元法的数学模型,编制出MATLAB语言的有限元程序,将该方法应用于解决-...
  • Logstash概念原理、与Flume的对比

    万次阅读 多人点赞 2019-07-01 20:59:44
    Logstash概念 Logstash是一款开源的数据收集引擎,具备实时管道处理能力。简单来说,logstash作为数据源与数据存储分析工具之间的桥梁,结合ElasticSearch以及Kibana,能够极大方便数据的处理与分析。通过200多个...

    Logstash概念

    Logstash是一款开源的数据收集引擎,具备实时管道处理能力。简单来说,logstash作为数据源与数据存储分析工具之间的桥梁,结合ElasticSearch以及Kibana,能够极大方便数据的处理与分析。通过200多个插件,logstash可以接受几乎各种各样的数据。包括日志、网络请求、关系型数据库、传感器或物联网等等。

    Logstash工作过程

    在这里插入图片描述

    如上图,Logstash的数据处理过程主要包括:Inputs,Filters,Outputs 三部分,另外在Inputs和Outputs中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output,codec插件,以实现特定的数据采集,数据处理,数据输出等功能 。

    1. Inputs:用于从数据源获取数据,常见的插件如file, syslog, redis, beats 等
    2. Filters:用于处理数据如格式转换,数据派生等,常见的插件如grok, mutate, drop, clone, geoip等
    3. Outputs:用于数据输出,常见的插件如elastcisearch,file, graphite, statsd等
    4. Codecs:Codecs(编码插件)不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline。Logstash不只是一个input | filter | output 的数据流,而是一个 input | decode | filter | encode | output 的数据流!codec 就是用来 decode、encode 事件的。

    Logstash简单实践

    我们使用Logstash输出一个 “hello world” 。在终端中,像下面这样运行命令来启动 Logstash 进程:

     # bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
    

    以上命令表示从控制台输入,然后通过Codec插件从控制台输出。然后终端在等待你的输入。敲入 Hello World,回车,查看结果:

    {
    	"@version" => "1",
    	"host" => "sdn-253",
    	"message" => "Hello World",
    	"@timestamp" => 2019-07-01T12:28:07.207Z
    }
    

    Logstash 就像管道符一样!你输入(就像命令行的 cat )数据,然后处理过滤(就像 awk 或者 uniq之类)数据,最后输出(就像 tee )到其他地方。数据在线程之间以 事件 的形式流传。Logstash会给事件添加一些额外信息。最重要的就是 @timestamp,用来标记事件的发生时间。 大多数时候,还可以见到另外几个:

    • host 标记事件发生在哪里。
    • type 标记事件的唯一类型。
    • tags 标记事件的某方面属性。这是一个数组,一个事件可以有多个标签。
      你可以随意给事件添加字段或者从事件里删除字段。

    小贴士:每个 logstash 过滤插件,都会有四个方法叫 add_tag, remove_tag, add_field 和remove_field。它们在插件过滤匹配成功时生效。

    Logstash配置语法

    数据类型

    Logstash 支持少量的数据值类型:
    bool

    debug => true
    

    string

    host => "hostname"
    

    number

    port => 514
    

    array

    match => ["datetime", "UNIX", "ISO8601"]
    

    hash

    options => {
        key1 => "value1",
        key2 => "value2"
    }
    

    条件判断

    表达式支持下面这些操作符:
    相等: ==, !=, <, >, <=, >=
    正则: =~(匹配正则), !~(不匹配正则)
    包含: in(包含), not in(不包含)
    布尔操作: and(与), or(或), nand(非与), xor(非或)
    一元运算符:!(取反) ,()(复合表达式), !()(对复合表达式结果取反)
    通常来说,你都会在表达式里用到字段引用。比如:

    if "_grokparsefailure" not in [tags] {
    	...
    } else if [status] !~ /^2\d\d/ and [url] == "/noc.gif" {
    	...
    } else {
    	...
    }
    

    Logstash插件

    logstash插件功能很强大,下面会根据每个模块的情况,对常用插件进行分析。

    Input模块

    标准输入

    我们已经使用 stdin 输入Hello World了。这也应该是 logstash 里最简单和基础的插件了。 input { stdin { } }表示从控制台输入

    File插件

    从文件读取数据,如常见的日志文件。文件读取通常要解决几个问题:
    在这里插入图片描述
    logstash-input-file配置:
    在这里插入图片描述

    其中path匹配规则如下,路径必须使用绝对路径,不支持相对路径:
    /var/log/.log:匹配/var/log目录下以.log结尾的所有文件
    /var/log/**/
    .log:匹配/var/log所有子目录下以.log结尾的文件
    /var/log/{app1,app2,app3}/*.log:匹配/var/log目录下app1,app2,app3子目录中以.log结尾的文件

    file插件作为input例子如下:

    input {
        # file为常用文件插件,插件内选项很多,可根据需求自行判断
        file {
    	   # 要导入的文件的位置,可以使用*,例如/var/log/nginx/*.log
            path => "/var/lib/mysql/slow.log"
            # 要排除的文件
            exclude =>”*.gz”
            # 从文件开始的位置开始读,end表示从结尾开始读
            start_position => "beginning"
            # 多久之内没修改过的文件不读取,0为无限制,单位为秒
            ignore_older => 0  
            # 记录文件上次读取位置,输出到null表示每次都从文件首行开始解析
            sincedb_path => "/dev/null"
            # type字段,可表明导入的日志类型
            type => "mysql-slow"
        }
    }
    

    Http插件

    input {
    	http { port => 端口号 }
    }
    

    Redis插件

    input {
        # redis插件为常用插件,插件内选项很多,可根据需求自行判断
        redis {
            # EVAL命令返回的事件数目,设置为5表示一次请求返回5条日志信息
    	   batch_count => 1 
            # logstash redis插件工作方式
            data_type => "list" 
            # 监听的键值
            key => "logstash-test-list" 
            # redis地址
            host => "127.0.0.1" 
            # redis端口号
            port => 6379 
            # 如果有安全认证,此项为认证密码
            password => "123qwe" 
            # 如果应用使用了不同的数据库,此为redis数据库的编号,默认为0。
            db => 0 
            # 启用线程数量
            threads => 1
          }
    }
    

    Filter模块

    Filter是Logstash功能强大的主要原因,它可以对Logstash Event进行丰富的处理,比如解析数据、删除字段、类型转换等等,常见的有如下几个:
    在这里插入图片描述

    Date插件

    date插件可以将日期字符串解析为日期类型,然后替换@timestamp字段或者指定其他字段:

    filter{
    	date {
    	    match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"] 
             # 记录@timestamp时间,可以设置日志中自定的时间字段,如果日志中没有时间字段,也可以自己生成
             target=>“@timestamp”
             # 将匹配的timestamp字段放在指定的字段 默认是@timestamp
        }
    }
    

    Grok插件

    grok是filter最重要的插件,grok使用正则表达式来生成grok语法,grok支持许多默认的正则表达式规则,grok中常用patterns的配置路径:

    [logstash安装路径]\vendor\bundle\jruby\x.x\gems\logstash-patterns-core-x.x.x\patterns\grok-patterns
    

    grok语法

    %{SYNTAX:SEMANTIC}
    

    SYNTAX为grok pattern的名称,SEMANTIC为赋值字段名称。%{NUMBER:duration}可以匹配数值类型,但是grok匹配出的内容都是字符串类型,可以通过在最后指定为int或者float来强转类型:%{NUMBER:duration:int}

    自定义正则表达式
    例如,如下定义一个关键字为version的参数,内容为两位的数字。

    (?<version>[0-9]{2})
    

    自定义grok pattern
    我们通过pattern_definitions参数,以键值对的方式定义pattern名称和内容。也可以通过pattern_dir参数,以文件的形式读取pattern。

    filter {
    	grok {
    		match => {
    			"message" => "%{SERVICE:service}"
    		}
    		pattern_definitions => {
    			"SERVICE" => "[a-z0-9]{10,11}"
    		}
    	}
    }
    

    Dissect插件

    基于分隔符原理解析数据,解决grok解析时消耗过多cpu资源的问题。dissect语法简单,能处理的场景比较有限。它只能处理格式相似,且有分隔符的字符串。它的语法如下:

    1、%{}里面是字段
    2、两个%{}之间是分隔符。

    例如,有以下日志:

    Apr 26 12:20:02 localhost systemd[1]: Starting system activity accounting tool
    

    我想要把前面的日期和时间解析到同一个字段中,那么就可以这样来做:

    filter {
        dissect {
            mapping => {
            	"message" => "%{ts} %{+ts} %{+ts} %{src} %{prog}[%{pid}]: %{msg}"
            }
        }
    }
    

    Mutate插件

    mutate是使用最频繁的插件,可以对字段进行各种操作,比如重命名、删除、替换、更新等,主要操作如下:

    1、convert类型转换
    2、gsub字符串替换
    3、split、join、merge字符串切割、数组合并为字符串、数组合并为数组
    4、rename字段重命名
    5、update、replace字段内容更新或替换。它们都可以更新字段的内容,区别在于update只在字段存在时生效,而replace在字段不存在时会执行新增字段的操作
    6、remove_field删除字段

    Json插件

    将字段内容为json格式的数据解析出来,如果不指定target的话,那么filter会把解析出来的json数据直接放到根级别。配置实例如下:

    filter {
    	json {
    		source => "message"
    		target => "msg_json"
    	}
    }
    

    运行结果:

    {
        "@version": "1",
        "@timestamp": "2014-11-18T08:11:33.000Z",
        "host": "web121.mweibo.tc.sinanode.com",
        "message": "{\"uid\":3081609001,\"type\":\"signal\"}",
        "jsoncontent": {
            "uid": 3081609001,
            "type": "signal"
        }
    }
    

    Geoip插件

    GeoIP 库可以根据 IP 地址提供对应的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。语法如下:

    filter {
    	geoip {
    		source => "message"
    	}
    }
    

    运行结果:

    {
           "message" => "183.60.92.253",
          "@version" => "1",
        "@timestamp" => "2014-08-07T10:32:55.610Z",
              "host" => "raochenlindeMacBook-Air.local",
             "geoip" => {
                          "ip" => "183.60.92.253",
               "country_code2" => "CN",
               "country_code3" => "CHN",
                "country_name" => "China",
              "continent_code" => "AS",
                 "region_name" => "30",
                   "city_name" => "Guangzhou",
                    "latitude" => 23.11670000000001,
                   "longitude" => 113.25,
                    "timezone" => "Asia/Chongqing",
            "real_region_name" => "Guangdong",
                    "location" => [
                [0] 113.25,
                [1] 23.11670000000001
            ]
        }
    }
    

    Output模块

    标准输出

    标准输出多用于调试,配置示例:

    output {
        stdout {
            codec => rubydebug
        }
    }
    

    redis插件

    output {
         redis{  # 输出到redis的插件,下面选项根据需求使用
             batch => true
             # 设为false,一次rpush,发一条数据,true为发送一批
             batch_events => 50
             # 一次rpush发送多少数据
             batch_timeout => 5
             # 一次rpush消耗多少时间
             codec => plain
             # 对输出数据进行codec,避免使用logstash的separate filter
             congestion_interval => 1
             # 多长时间进项一次拥塞检查
             congestion_threshold => 5
             # 限制一个list中可以存在多少个item,当数量足够时,就会阻塞直到有其他消费者消费list中的数据
             data_type => list
             # 使用list还是publish
             db => 0
             # 使用redis的那个数据库,默认为0号
             host => ["127.0.0.1:6379"]
             # redis 的地址和端口,会覆盖全局端口
             key => xxx
             # list或channel的名字
             password => xxx
             # redis的密码,默认不使用
             port => 6379
             # 全局端口,默认6379,如果host已指定,本条失效
             reconnect_interval => 1
             # 失败重连的间隔,默认为1s
             timeout => 5
             # 连接超时的时间
             workers => 1
             # 工作进程
         }
    }
    

    elasticsearch插件

    output {
        # stdout { codec => "rubydebug" }
        # 筛选过滤后的内容输出到终端显示
        elasticsearch {  # 导出到es,最常用的插件
            codec => "json"
            # 导出格式为json
            hosts => ["127.0.0.1:9200"]
            # ES地址+端口
            index => "logstash-slow-%{+YYYY.MM.dd}"
            # 导出到index内,可以使用时间变量
            user => "admin"
            password => "xxxxxx"
            # ES如果有安全认证就使用账号密码验证,无安全认证就不需要
            flush_size => 500
            # 默认500,logstash一次性攒够500条的数据在向es发送
            idle_flush_time => 1
            # 默认1s,如果1s内没攒够500,还是会一次性把数据发给ES
        }   
    }
    

    Logstash配置实例

    logstash配置的时候,input和output都可以配置多个不同的入参。filter可以针对input里面的每个数据源做不一样的过滤,通过各自定义的type来匹配。配置示例如下:

    input{
          kafka{
            bootstrap_servers => ["192.168.110.31:9092,192.168.110.31:9093,192.168.110.31:9094"]
            client_id => "test"
            group_id => "test"
            auto_offset_reset => "latest" //从最新的偏移量开始消费
            consumer_threads => 5
            decorate_events => true //此属性会将当前topic、offset、group、partition等信息也带到message中
            topics => ["logq","loge"] //数组类型,可配置多个topic
            type => "bhy" //所有插件通用属性,尤其在input里面配置多个数据源时很有用
          }
    	file {
    	   # 要导入的文件的位置,可以使用*,例如/var/log/nginx/*.log
            path => "/var/lib/mysql/slow.log"
            # 记录文件上次读取位置,输出到null表示每次都从文件首行开始解析
            sincedb_path => "/dev/null"
            # type字段,可表明导入的日志类型
            type => "mysql-slow"
        }
    }
    filter{
            if[type] == "bhy"{
                grok{
                   ........
                }
            }
            if[type] == "mysql-slow"{
                mutate{
                   ........
                }
            }
    }
    output {
            if[type] == "bhy"{
              elasticsearch{
                   hosts => ["192.168.110.31:9200"]
                   index => "school"
                   timeout => 300
                   user => "elastic"
                   password => "changeme"
              }
    
            }
            if[type] == "mysql-slow"{
                ........
            }
     }
    

    1、针对如下类型的log:

    Apr 26 12:20:02 localhost systemd[1]: Starting system activity accounting tool
    

    logstash的配置如下:

    input {
        file {
            path => "/home/songfeihu/logstash-6.2.3/config/test.log"
            # 要导入的文件的位置,可以使用*,例如/var/log/nginx/*.log
            start_position => "beginning"
            # 从文件开始的位置开始读,end表示从结尾开始读
            ignore_older => 0
            # 多久之内没修改过的文件不读取,0为无限制,单位为秒
            sincedb_path => "/dev/null"
            # 记录文件上次读取位置,输出到null表示每次都从文件首行开始解析
        }
    }
    filter {
            dissect {
                    mapping => {
                            "message" => "%{ts} %{+ts} %{+ts} %{src} %{prog}[%{pid}]: %{msg}"
                    }
            }
            if "Starting" in [msg]{
                    grok{
                            match => {"msg" => "(?<test1>[a-zA-Z0-9]+).*"}
                    }
            }
           mutate {
                   remove_field => ["message"]
           }
    }
    output {
    	stdout{codec=>rubydebug}
    }
    

    output返回值:

    {
              "host" => "sdn-253",
          "@version" => "1",
        "@timestamp" => 2019-06-28T08:08:58.062Z,
               "msg" => "Starting system activity accounting tool",
             "test1" => "Starting",
                "ts" => "Apr 26 12:20:02",
              "path" => "/home/songfeihu/logstash-6.2.3/config/test.log",
               "src" => "localhost",
              "prog" => "systemd",
               "pid" => "1",
           "message" => "Apr 26 12:20:02 localhost systemd[1]: Starting system activity accounting tool"
    }
    

    2、针对如下log:

    <188>Mar 29 2019 16:57:30 BJQ-219-A1-ITCloud-FW-E8000E-1 %%01SEC/4/POLICYPERMIT(l)[1976979]:VSYS=public;
    

    logstash配置如下:

    input {
        stdin {    }
    }
    filter {
        grok {
            match => {
    	"message" => "\<(?<id>[0-9]+)\>(?<timestamp>([a-zA-Z]+)\s[0-9]{1,2}\s[0-9]{1,4}\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})\s%{HOSTNAME:hostname} \%\%(?<version>[0-9]{2})(?<model>[a-zA-Z0-9]+)\/(?<severity>[0-9])\/(?<brief>[a-zA-Z0-9]+)\S+:(?<description>.*)"
    	}
        }
    }
    output {
    stdout{codec=>rubydebug}
    }
    

    output输出如下:

    {
               "host" => "sdn-253",
                 "id" => "188",
          "timestamp" => "Mar 29 2019 16:57:30",
           "hostname" => "BJQ-219-A1-ITCloud-FW-E8000E-1",
              "brief" => "POLICYPERMIT",
         "@timestamp" => 2019-06-28T09:54:01.987Z,
           "severity" => "4",
           "@version" => "1",
            "version" => "01",
              "model" => "SEC",
            "message" => "<188>Mar 29 2019 16:57:30 BJQ-219-A1-ITCloud-FW-E8000E-1 %%01SEC/4/POLICYPERMIT(l)[1976979]:VSYS=public;",
        "description" => "VSYS=public;"
    }
    

    Flume

    Apache Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume有两个版本,分别是Flume OG和Flume NG,目前用的都是FlumeNG。
    Flume具有高可用,分布式,配置工具,其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。

    Flume的外部结构

    在这里插入图片描述

    如上图所示,数据发生器(如:facebook,twitter)产生的数据被服务器上的agent所收集,之后数据收容器从各个agent上汇集数据并将采集到的数据存入到HDFS或者HBase中。

    Flume事件

    事件作为Flume内部数据传输的最基本单元.它是由一个转载数据的字节数组(该数据组是从数据源接入点传入,并传输给传输器,也就是HDFS/HBase)和一个可选头部构成。
    典型的Flume 事件如下面结构所示:

    在这里插入图片描述

    Flume agent

    对于每一个Agent来说,它就是一共独立的守护进程(JVM),它从客户端哪儿接收收集,或者从其他的Agent哪儿接收,然后迅速的将获取的数据传给下一个目的节点sink,或者agent. 如下图所示flume的基本模型:

    在这里插入图片描述
    Source

    从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channal,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等。

    Channel

    channal是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性.并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel ,Memort channel等.

    Sink

    sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地.目标地可能是另一个sink,也可能HDFS,HBase。当Sink写出event成功后,就会向Channel提交事务。Sink事务提交成功,处理完成的event将会被Channel删除。否则Channel会等待Sink重新消费处理失败的event。

    Interceptor

    拦截器是简单的插件式组件,设置在source和channel之间。source接收到的事件event,在写入channel之前,拦截器都可以进行转换或者删除这些事件。每个拦截器只处理同一个source接收到的事件。可以自定义拦截器。预定义的拦截器包含时间戳拦截器TimestampInterceptor、主机拦截器HostInterceptor、静态拦截器StaticInterceptor、正则过滤拦截器RegexExtractorInterceptor,通过使用不同的拦截器,实现不同的功能。
    但是以上的这些拦截器,不能改变原有日志数据的内容或者对日志信息添加一定的处理逻辑,当一条日志信息有几十个甚至上百个字段的时候,在传统的Flume处理下,收集到的日志还是会有对应这么多的字段,也不能对你想要的字段进行对应的处理。根据实际业务的需求,为了更好的满足数据在应用层的处理,通过自定义Flume拦截器,过滤掉不需要的字段,并对指定字段加密处理,将源数据进行预处理。减少了数据的传输量,降低了存储的开销。

    在这里插入图片描述

    Logstash和Flume对比

    1、Logstash比较偏重于字段的预处理,在异常情况下可能会出现数据丢失,只是在运维日志场景下,一般认为这个可能不重要;而Flume偏重数据的传输,几乎没有数据的预处理,仅仅是数据的产生,封装成event然后传输;传输的时候flume比logstash多考虑了一些可靠性。因为数据会持久化在channel中,数据只有存储在下一个存储位置(可能是最终的存储位置,如HDFS;也可能是下一个Flume节点的channel),数据才会从当前的channel中删除。这个过程是通过事务来控制的,这样就保证了数据的可靠性。
    2、Logstash有几十个插件,配置比较灵活,flume强调用户自定义开发;
    3、Logstash的input和filter还有output之间都存在buffer,进行缓冲;Flume直接使用channel做持久化
    4、Logstash性能以及资源消耗比较严重,且不支持缓存;

    在这里插入图片描述

    参考

    ELK logstash 配置语法(24th)
    ELK 之 Logstash
    使用logstash的logstash-input-kafka插件读取kafka中的数据
    logstash过滤器filter grok多种日志匹配使用心得
    一文快速上手Logstash
    logstash的各个场景应用(配置文件均已实践过)
    Logstash配置详解(不断更新)
    Logstash 最佳实践
    Logstash的介绍、原理、优缺点、使用、持久化到磁盘、性能测试
    数据采集:Flume和Logstash的工作原理和应用场景
    Flume日志采集系统与Logstash对比
    Flume概念与原理、与Kafka优势对比
    Flume构建日志采集系统
    大数据学习——flume拦截器
    日志采集系统flume和kafka有什么区别及联系,它们分别在什么时候使用,什么时候又可以结合?

    展开全文
  • 01.MongoDB基本概念原理

    千次阅读 2019-04-02 12:37:59
    一、MongoDB概述 1、mongoDB概述 MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写 2、NoSQL概述 ...NoSQL,指的是非关系型的数据库。...3、关系数据库对比非关系数据库 关系型数据库 ...

    一、MongoDB概述

    1、mongoDB概述

    MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写

    2、NoSQL概述

    NoSQL,指的是非关系型的数据库。NoSQL 有时也称作Not Only SQL 的缩写,
    是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL 用于超大规模数据的存储

    3、关系数据库对比非关系数据库

    关系型数据库                                           NoSQL 数据库
    高度组织化结构化数据                             代表着不仅仅是SQL
    结构化查询语言(SQL)                         没有声明性查询语言
    数据和关系都存储在单独的表中               没有预定义的模式
    数据操作语言,数据定义语言                   键-值对存储,列存储,文档存储,图形数据库
    严格的一致性                                           最终一致性,而非ACID 属性
    基础事务                                                  非结构化和不可预知的数据
                                                                     CAP 定理
                                                                       高性能,高可用性和可伸缩性

    4、NoSQL数据库分类

    列存储:Hbase/Cassandra

    文档存储:MongoDB/CounchDB

    key-value存储:Redis/Memcache

    图存储:Neo4j/FlockDB

    对象存储:Db4o

    XML数据库:BaseX

    5、CAP原则
    CAP 定理(CAP theorem), 又被称作布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

    一致性(Consistency) (所有节点在同一时间具有相同的数据)
    可用性(Availability) (保证每个请求不管成功或者失败都有响应)
    分区容错性(Partition tolerance) (系统中任意信息的丢失或失败不影响系统的继续运行)

    CAP 理论的核心是:

    一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个

    根据CAP 原理将NoSQL 数据库分成了满足CA 原则、满足CP 原则和满足AP 原则三大类:

    CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
    CP - 满足一致性,分区容错性的系统,通常性能不是特别高。
    AP - 满足可用性,分区容错性的系统,通常可能对一致性要求低一些。

    二、MongoDB体系结构

    关系数据库MongoDB解释对比
    DatabaseDatabase数据库/数据库
    TableCollection数据库表/集合
    RowDocument数据库记录行/文档
    ColumnField数据列/数据字段
    IndexIndex索引/索引
    Table join 表关联/MongoDB不支持
    Primary keyObject ID主键/MongoDB自动将_id设为主键

     

    三、MongoDB数据类型

    BSON

    BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,
    采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的特点

    四、MongoDB底层原理

    MongoDB 的集群部署方案中有三类角色:

    实际数据存储结点、配置文件存储结点和路由接入结点。

    MongDB客户端访问过程:

    连接的客户端直接与路由结点相连,从配置结点上查询数据,根据查询结果到实际的存储结点上查询和存储数据。

    MongoDB 的部署方案:

    单机部署、复本集(主备)部署、分片部署、复本集与分片混合部署。

    1、混合的部署方式如下图:

    混合部署方式下向MongoDB 写数据的流程如图:

    混合部署方式下读MongoDB 里的数据流程如图:

    2、复本集、

    又有主和从两种角色,写数据和读数据也是不同,写数据的过程是只写到主结点中,由主结点以异步的方式同步到从结点中

    下面是写数据图示:

    读数据则只要从任一结点中读取,具体到哪个结点读取是可以指定的、图示如下:

    MongoDB 的分片:

    分片(sharding)是将数据拆分,将其分散存到不同机器上的过程。MongoDB 支持自动分片,
    可以使数据库架构对应用程序不可见。对于应用程序来说,好像始终在使用一个单机的 MongoDB 服务器一样,
    另一方面,MongoDB 自动处理数据在分片上的分布,也更容易添加和删除分片。

    假设我们以某一索引键(ID)为片键,ID 的区间[0,50],划分成5 个chunk,分别存储到3 个片服务器中,如图所示:

    MongoDB配置结点:(保存集群和分片的元数据)

     存储配置文件的服务器其实存储的是片键与chunk 以及chunk 与server 的映射关系,用上面的数据表示的配置结点存储的数据模型如下表:

     MongoDB路由结点:

    路由角色的结点在分片的情况下起到负载均衡的作用。

    五、MongoDB应用场景

    1、网站实时数据量大

    2、数据读写都很频繁

    3、价值较低

    展开全文
  • 常见加密算法原理概念

    千次阅读 2018-12-22 16:20:17
    一、概述 在安全领域,利用密钥加密算法来对通信的过程进行加密是一种常见的安全手段。利用该手段能够保障数据安全通信的三个目标: 1、数据的保密性,防止...下面我们来了解下相关的算法原理及其常见的算法。...
  •   既然涉及统计学了,我们先来了解一些基础概念,这些会对我们理解这些内容有很大帮助。 在现在的Appadhoc平台做测试时,我们通过对试验数据的解读来确认哪个版本的效果更好;整个过程就其实相当于在做一个对比...
  • ES(一):ES基本概念原理简单介绍

    万次阅读 多人点赞 2019-11-24 18:56:02
    我们将这几个概念与传统的关系型数据库中的库、表、行、列等概念进行对比,如下表: RDBS ES 数据库(database) 索引(index) 表(table) 类型(type)(ES6.0之后被废弃,es7中完全删除) 表结构(schema) 映射...
  • CMOS工作原理概念

    万次阅读 2019-05-05 16:55:12
    而讨论清楚的概念原理会从正在讨论的原理概念中移到有定论的概念原理中,作为继续讨论的出发点。 在待探讨的概念原理中,有一些是我认为有问题或存在歧义的观点,还有一些是我根据有定论的概念原理推理...
  • 替换高清大图请点击此处输入图片描述 摘要: 远程直接内存访问(即Remote Direct Memory Access)是一种直接内存访问技术...RDMA原理分析、对比和技术实现解析&gt;电子书。 RDMA技术最早出现在Infiniband网络,...
  • Flume概念原理、与Kafka优势对比

    万次阅读 多人点赞 2018-03-27 11:30:15
    flume具有高可用,分布式,配置工具,其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。其结构如下图所示:    2.应用场景  比如我们在做一个电子商务网站...
  • 虚拟DOM的实现原理和优劣对比

    千次阅读 2019-12-24 17:28:39
    虚拟DOM的实现原理和优劣对比
  • Elasticsearch最佳实践之核心概念原理

    万次阅读 多人点赞 2018-12-03 22:29:58
    作为专栏文章的第二篇,本文从数据组织、数据分布、集群角色、数据写入与存储结构多个方面对Elasticsearch的核心概念进行整理,尽可能由浅入深的交代清楚每个概念
  • CDN概念和基本原理

    千次阅读 2019-05-28 16:45:46
    1. 什么是CDN? CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的...CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服...
  • 编程语言原理(COMP 3220)旨在介绍编程语言的主要结构,并对比过去和现在不同编程语言中的主要优缺点。向学生介绍各种编程语言,并通过用这些语言编写程序来展示他们对课堂上提出的概念的理解。最后,学生将探讨...
  • es,mysql,mongodb三个数据库的基本概念对比 概念 es mysql mongodb 数据库 表 索引(indices) Table 数据表 集合(Collection) 行 文档(Document) Row 行 文档(Document) 列 字段(Field) ...
  • OTP概念及实现原理简析

    千次阅读 2021-11-10 14:03:36
    本文概要介绍了OTP的概念原理和实现步骤。 一、什么是OTP OTP:One Time Password,又称一次性口令、一次性密码、动态密码、单次有效密码。 OTP基于专门的算法每隔一定的时间间隔生成一个不可预测的随机数字...
  • (若干细节不清,只能说从概念上大致如此,请原谅)。各种相关的软件都是如此,例如TeamViewer、Oray向日葵乃至QQ远程协助等。就说这个ngrok,其实也是需要通讯双方连接ngrok中心服务器,甚至中心服务器的某些高级...
  • ospf原理及基本概念

    千次阅读 2020-08-17 16:06:25
    1.OSPF的基本原理 当路由器开启OSPF后,路由器之间就会相互发送HELLO报文,HELLO报文中包含一些路由器和链路的相关信息,发送HELLO报文的目的是为了形成邻居表,然后,路由器之间就会发送LSA(LINK STATE ...
  • 1、原子性概念 原子性是指**一个操作是不可中断的,要么全部执行成功,要么全部执行失败,有着“同生共死”的感觉。**即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其它的线程干扰。 例如语句(a++)实际...
  • Vmware虚拟化概念原理

    万次阅读 多人点赞 2018-05-18 23:08:26
    快照的工作原理:当为虚拟机拍摄快照时,回生成快照的状态文件,保留拍摄快照时虚拟机运行的状态信息,同时,将元虚拟机的磁盘变为只读磁盘,并且新建一块新的增量虚拟磁盘,拍摄快照后的变更数据,写入增量虚拟磁盘...
  • 5、微程序控制器思维导图微程序控制器的设计思路微程序控制器的基本结构微程序控制器的工作原理概念对比程序与微程序指令与微指令主存储器与控制器存储器IR和uIR(MDR和CMDR)PC和uPC(MAR和CMAR) 思维导图 微程序控制...
  • 图像处理之调整对比

    千次阅读 2020-01-06 14:25:44
    一、概念。 a.rgb 假设一副图像的色彩模型是rgb,那么每个像素占24bit(不考虑压缩),r,g,b各占8bit,值从0~255。全0是黑,全255是白。 当r,g,b值相等时,是一条灰色渐变带,如(50,50,50) ,(127,127,127)...
  • 作业调度基本原理

    2018-06-24 15:45:37
    作业调度基本原理基本概念 : 工作原理 产品对比 作业示例
  • 马上就要编译原理的考试了,看了看去年试卷,做几道题,发现自己对文法的概念都很模糊,下面整理了一下四种文法的基本概念:  那么什么是文法呢? 乔姆斯基把文法分成四种类型,即0型、1型、2型和3型。这几类...
  • 比特币原理详解

    万次阅读 多人点赞 2019-10-29 11:12:13
    一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本...其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
  • 这个问题很有意思,我自己也很感兴趣,因此进行了一些分析和对比,得出结论如下: 1.es天生的分布式架构,天然支持海量数据的分片和查询,而mysql不行 2.mysql和es底层索引结构导致即便是单片数据查询,es也更适合做...
  • Cache 的基本概念与工作原理

    万次阅读 多人点赞 2019-05-06 13:09:39
    在我们接触的嵌入式系统中,具体的存取时间和存储容量的大小可能和上图不符,但是不同层级之间的量级对比还是一致的。 3. 为什么需要 Cache? 由于 CPU 和主存所使用的半导体器件工艺不同,两者速度上的差异...
  • 序列比对概念及相应工具的对比

    千次阅读 2019-09-07 10:42:44
    序列比对概念及相应工具的对比 0x01 概念和意义 在生物信息学研究中,最基本的部分是序列比对,而最基本的操作是比对,主要可分为双系列比对和多序列比对,辨别序列之间的差异,同时发现生物序列中的机构和功能信息,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,803
精华内容 55,521
热门标签
关键字:

对比原理概念