随笔分类 -  Reactive-Streams

Reactive-Streams
摘要:上篇我们讨论了Akka-http的文件交换。由于文件内容编码和传输线上数据表达型式皆为bytes,所以可以直接把文件内容存进HttpEntity中进行传递。那么对于在内存里自定义的高级数据类型则应该需要首先进行byte转换后才能放入HttpEntity中了。高级数据类型与byte之间的相互转换就是m 阅读全文
posted @ 2017-12-06 10:42 雪川大虫 阅读(1088) 评论(0) 推荐(0)
摘要:所谓文件交换指的是Http协议中服务端和客户端之间文件的上传和下载。Akka-http作为一种系统集成工具应该具备高效率的数据交换方式包括文件交换和数据库表行的上传下载。Akka-http的数据交换模式支持流式操作:代表交换数据可以是一种无限长度流的元素。这种模式首先解决了纯Http大数据通过Mul 阅读全文
posted @ 2017-12-02 12:28 雪川大虫 阅读(1714) 评论(0) 推荐(0)
摘要:我们说过Akka-http是一个好的系统集成工具,集成是通过数据交换方式实现的。Http是个在网上传输和接收的规范协议。所以,在使用Akka-http之前,可能我们还是需要把Http模式的网上数据交换细节了解清楚。数据交换双方是通过Http消息类型Request和Response来实现的。在Akka 阅读全文
posted @ 2017-11-30 19:20 雪川大虫 阅读(2060) 评论(0) 推荐(0)
摘要:Akka-http的客户端连接模式除Connection-Level和Host-Level之外还有一种非常便利的模式:Request-Level-Api。这种模式免除了连接Connection的概念,任何时候可以直接调用singleRequest来与服务端沟通。下面我们用几个例子来示范singleR 阅读全文
posted @ 2017-11-22 12:19 雪川大虫 阅读(1821) 评论(0) 推荐(0)
摘要:Akka-http的客户端Api应该是以HttpRequest操作为主轴的网上消息交换模式编程工具。我们知道:Akka-http是搭建在Akka-stream之上的。所以,Akka-http在客户端构建与服务器的连接通道也可以用Akka-stream的Flow来表示。这个Flow可以通过调用Http 阅读全文
posted @ 2017-11-09 16:33 雪川大虫 阅读(1724) 评论(0) 推荐(0)
摘要:在前面几篇讨论里我们都提到过:Akka-http是一项系统集成工具库。它是以数据交换的形式进行系统集成的。所以,Akka-http的核心功能应该是数据交换的实现了:应该能通过某种公开的数据格式和传输标准比较方便的实现包括异类系统之间通过网上进行的数据交换。覆盖包括:数据编码、发送和数据接收、解析全过 阅读全文
posted @ 2017-11-06 12:06 雪川大虫 阅读(1058) 评论(1) 推荐(0)
摘要:在以前的博文中我们介绍了Slick,它是一种FRM(Functional Relation Mapper)。有别于ORM,FRM的特点是函数式的语法可以支持灵活的对象组合(Query Composition)实现大规模的代码重复利用,但同时这些特点又影响了编程人员群体对FRM的接受程度,阻碍了FRM 阅读全文
posted @ 2017-09-27 08:39 雪川大虫 阅读(978) 评论(0) 推荐(1)
摘要:akka-stream是基于Actor模式的,所以也继承了Actor模式的“坚韧性(resilient)”特点,在任何异常情况下都有某种整体统一的异常处理策略和具体实施方式。在akka-stream的官方文件中都有详细的说明和示范例子。我们在这篇讨论里也没有什么更好的想法和范例,也只能略做一些字面翻 阅读全文
posted @ 2017-09-21 16:47 雪川大虫 阅读(2491) 评论(3) 推荐(0)
摘要:在现实应用中akka-stream往往需要集成其它的外部系统形成完整的应用。这些外部系统可能是akka系列系统或者其它类型的系统。所以,akka-stream必须提供一些函数和方法来实现与各种不同类型系统的信息交换。在这篇讨论里我们就介绍几种通用的信息交换方法和函数。 akka-stream提供了m 阅读全文
posted @ 2017-09-19 11:28 雪川大虫 阅读(1765) 评论(1) 推荐(0)
摘要:如果你是一个Slick用户,或者你是一个数据库编程人员正在尝试进入函数式编程模式,那么FunDA可能会帮到你。 目前市面上FRM(Functional Relational Mapper),即函数式的数据库处理工具库的选择并不多,Typesafe公司的Slick可能是最通用的选择了。整体上来说:Sl 阅读全文
posted @ 2017-04-08 21:31 雪川大虫 阅读(1010) 评论(0) 推荐(0)
摘要:作为一个能安全运行的工具库,为了保证占用资源的安全性,对异常处理(exception handling)和事后处理(final clean-up)的支持是不可或缺的。FunDA的数据流FDAPipeLine一般是通过读取数据库数据形成数据源开始的。为了保证每个数据源都能被安全的使用,FunDA提供了 阅读全文
posted @ 2017-04-02 15:55 雪川大虫 阅读(409) 评论(0) 推荐(0)
摘要:在对上两篇讨论中我们介绍了并行运算的两种体现方式:并行构建数据源及并行运算用户自定义函数。我们分别对这两部分进行了示范。本篇我准备示范把这两种情况集成一体的并行运算模式。这次介绍的数据源并行构建方式也与前面描述的有所不同:在前面讨论里我们预知需要从三个独立流来并行构建数据源。但如果我们有一个不知长度 阅读全文
posted @ 2017-03-31 17:48 雪川大虫 阅读(448) 评论(0) 推荐(0)
摘要:FunDA的并行运算施用就是对用户自定义函数的并行运算。原理上就是把一个输入流截分成多个输入流并行地输入到一个自定义函数的多个运行实例。这些函数运行实例同时在各自不同的线程里同步运算直至耗尽所有输入。并行运算的具体函数实例数是用fs2-nondeterminism的算法根据CPU内核数、线程池配置和 阅读全文
posted @ 2017-03-30 17:57 雪川大虫 阅读(379) 评论(0) 推荐(0)
摘要:FunDA的并行数据库读取功能是指在多个线程中同时对多个独立的数据源进行读取。这些独立的数据源可以是在不同服务器上的数据库表,又或者把一个数据库表分成几个独立部分形成的独立数据源。当然,并行读取的最终目的是提高程序的运算效率。在FunDA中具体的实现方式是对多个独立的数据流进行并行读取形成一个统一综 阅读全文
posted @ 2017-03-26 16:36 雪川大虫 阅读(448) 评论(0) 推荐(0)
摘要:FunDA是一种函数式的编程工具,它所产生的程序是由许多功能单一的细小函数组合而成,这些函数就是用户自定义操作函数了。我们在前面曾经提过FunDA的运作原理模拟了数据流管道。流元素在管道流动的过程中被使用或者更新。在管道中流动的元素都必须继承FDAROW类型,可以细分成几个大类: 1、数据行(dat 阅读全文
posted @ 2017-03-21 12:35 雪川大虫 阅读(574) 评论(0) 推荐(0)
摘要:FunDA设计的主要目的是解决FRM(Functional Relation Mapping)如Slick这样的批次型操作工具库数据源行间游动操作的缺失问题。FRM产生的结果集就是一种静态集合,缺乏动态更新操作方式。FunDA提出的解决方案是把FRM产生的静态集合转变成动态流(stream),流内元 阅读全文
posted @ 2017-03-01 20:37 雪川大虫 阅读(439) 评论(0) 推荐(0)
摘要:FunDA最重要的设计目标之一就是能够实现数据库操作的并行运算。我们先重温一下fs2是如何实现并行运算的。我们用interleave、merge、either这几种方式来同时处理两个Stream里的元素。interleave保留了固定的交叉排列顺序,而merge和either则会产生不特定顺序,这个 阅读全文
posted @ 2017-02-20 14:37 雪川大虫 阅读(743) 评论(0) 推荐(0)
摘要:前面我们提过:FunDA就像一个管道(PipeLine)。管道内流动着一串数据(Data)或者运算指令(Action)。管道的源头就是能产生纯数据的数据源(Source),跟着在管道的中间会有一些节点(WorkNode),我们可以在这些节点施用(apply)用户提供的功能函数(Task)。用户功能函 阅读全文
posted @ 2017-02-16 08:21 雪川大虫 阅读(362) 评论(0) 推荐(0)
摘要:上篇我们讨论了静态数据源(Static Source, snapshot)。这种方式只能在预知数据规模有限的情况下使用,对于超大型的数据库表也可以说是不安全的资源使用方式。Slick3.x已经增加了支持Reactive-Streams功能,可以通过Reactive-Streams API来实现有限内 阅读全文
posted @ 2017-02-14 11:33 雪川大虫 阅读(421) 评论(0) 推荐(0)
摘要:Reactive-Stream不只是简单的push-model-stream, 它还带有“拖式”(pull-model)性质。这是因为在Iteratee模式里虽然理论上由Enumerator负责主动推送数据,实现了push-model功能。但实际上Iteratee也会根据自身情况,通过提供callb 阅读全文
posted @ 2017-02-06 15:04 雪川大虫 阅读(361) 评论(0) 推荐(0)