Electronic Joint Business

Solution for E-Business

pattern

设计模式之 CQRS 模式简介

用户和信息系统交互的主要行为就是对数据库或数据仓库进行 CRUD 操作,设计者通常为此构建出一个可供创建、读取、更新和删除的数据模型。该模型的接口就是供存储和获取数据之用的。但这种标准的分层体系结构并未处理两个问题:协作(collaboration)与失效(staleness)。1

协作是指多个参与者使用/修改相同的数据集的情况 — 尽管他们未必真的是相互协作。而失效是指在协作环境中,数据已显示给用户之后,相同的数据可能已经被另一个参与者修改 — 即数据失效了。出于性能使用缓存则进一步加剧了数据失效的问题。解决这两大问题,正是命令查询责任分离模式 (CQRS — Command Query Responsibility Segregation )背后的驱动力。

在图1-1 中,我们可以看到用户基本上会发起两类操作:命令(Command) 和查询(Query),如显示当季销量最好的产品属于查询,而提交订单、修改密码等则属于命令,也就是说:

  • 命令操作:用于修改单个对象或者整个系统的状态(有时也称为 modifiers 或 mutators).
  • 查询操作:用于返回结果且不改变对象状态

从事务的角度上看,查询操作与命令操作对事务的要求不一样。由于查询操作不会改变系统状态,因而,不会产生最终的数据不一致。从请求响应的角度来看,查询操作常常需要同步请求,实时返回结果;命令操作则不然,因为我们并不期待命令操作必须返回结果,这就可以采用fire-and-forget方式,而这种方式正是运用异步操作的前提。

对于大多数软件系统而言,查询操作发起的频率通常要远远高于命令操作。由于查询操作不会造成数据的修改,因而它属于一种幂等操作,可以反复地发起,而不用担心会对系统造成影响。基于这种特性,我们还可以为其提供缓存,从而改善查询的性能。命令操作则与之相反,它会直接影响数据的改变。

>>> 阅读全文

 

,

AWK 语法入门 (一)

AWK 和 GAWK

在日常工作中,我们会遇到许多需要理解和提取文本的要求。一般来说,简单的要求,我们可以使用 grep,复杂的,可能会采用Perl 和其他的解决方案。在本系列文章中,我们要介绍的一种专门为文本处理和模式匹配而生的语言 — AWK,这个古怪的名字其实来自于它的三个主要作者的首字母缩写:Drs. A. Aho、P. Weinberger 和 B. Kernighan。

简单描述一下 AWK 的工作方式:AWK 的程序语句描述了需要处理的数据的模式和操作,运行时,AWK在其输入的数据中搜索包含模式的记录,然后对该记录进行指定的操作,,所以 AWK 非常擅长于处理数据库和表型数据,如从多个数据集中提取一些列、建立报表或分析数据等等。AWK能够用很短的程序对文档里的资料做修改、比较、提取、打印等处理,并且能和管道一起使用,是管理员和程序员一个不可缺少的工具。

AWK的主要功能是针对文件的每一行(line),也就是每一条记录,搜寻指定的格式。当某一行符合指定的格式时,AWK就会在此行执行被指定的动作。AWK依此方式自动处理输入文件的每一行直到输入文件档案结束。因此 AWK 也被称作是数据驱动的语言。AWK经常用在如下的几个方面:

  • 根据要求选择文件的某几行,几列或部分字段以供显示输出。
  • 分析文档中的某一个字出现的频率、位置等。
  • 根据某一个文档的信息准备格式化输出。
  • 以一个功能十分强大的方式过滤输出文档。
  • 根据文档中的数值进行计算。
  • AWK 存在着几个不同的版本,比如早期的版本称为 OAWK (old awk),而Dr. Kernighan 又维护了一个 NAWK(New AWK),随着 GNU 项目的蓬勃发展,又出现了 GAWK,它主要是为了替代 OAWK,并包含了 NAWK 的一些特性。

    >>> 阅读全文

     

    , ,