如何用AI技术降噪? QCon 广州“音视频架构实践”专场给你答案! 了解详情
写点什么

程序原本(五):海量数据运算中公开的秘术

  • 2020 年 2 月 14 日
  • 本文字数:1181 字

    阅读完需:约 4 分钟

程序原本(五):海量数据运算中公开的秘术

程序原本(五):海量数据运算中公开的秘术


编者按:本文节选自周爱民著《程序原本》一书中的部分章节。


海量数据运算中公开的秘术:传递逻辑而不是传输数据

数据或逻辑的不变性是这两类大型系统(以及系统开发语言)的核心区别,如图 49 所示的两种“PD 模型”1


1 PD 模型描述处理(Process)与数据(Data)之间的关系,通常用于对计算范式的描述。



图 1 两种 “PD 模型”:数据或逻辑的不变性


函数式语言,例如 Erlang 和 MapReduce,主张第一种系统模型(另一种模型在后文中另作讨论),因此适宜于编写逻辑确定的系统。它使数据 D 穿过逻辑,形成 D’,这一过程是确定的;而由 D’与其他的、后续的逻辑构成的部分(子系统或领域),并不影响当前系统的确定性。


但是我们也可能会注意到,在网络上产生数据(例如发表博客或提交回复)时,数据是动态产生的;而当这些数据被收集起来之后,我们展示它们时数据却是静态的。简单地说,数据收集和规格化,与基于数据的应用程序开发看起来并不是一回事。在后者,即对于我们一般意义上的应用程序开发(而非数据处理),我们通常还是会选择第二种模型——让逻辑作用于数据。


而这一模型事实上并不简单。例如,即使我们的数据是确定的,但如果它本身是海量的、分布的、复杂结构的,又应当如何处理呢?仍以我们在上一小节讨论过的“搜索”为例,如果一个搜索引擎已经获得了数以亿计的网页,分布在不同物理位置的存储设备中,又如何能让一个关键字搜索快速得到响应呢?


首先,真正发生一个“按 Key 搜索”的行为时,事实上是不会到具体网页中去“逐字节查找”的。关于“Search Keys”与“Page Keys”的关系以及“Page Keys”与存储的部署关系,将涉及非常多的系统策略,在此我们不细讨论。我们这里只关注“如何发生查找逻辑”这一个问题。而这个问题的本质是:如果逻辑所需处理的数据是不可迁移的,那么逻辑可否迁移?例如,如果我们的“按 Key 搜索”行为可以被分拆为多个子处理,那么能否将这些子处理“送入到”数据所在的集群(Cluster)并完成运算呢?


传递逻辑而不是传输数据,是海量数据运算的另一个思路,而这一思路依赖的条件是:逻辑的子过程的分拆是可能的、可控的2。在类似 MapReduce 的方案中,Map/Reduce Jobs 的执行就具有类似的特点。也就是说,我们必须关注另一个事实:


2 我们讨论过,这正是函数式语言的优势——将逻辑作为可迁移对象通常是基于运行机制来保障的、具有逻辑自身的不知觉性,而命令式语言则难于实现这一点。但看起来,我们在这里所面临的又似乎是典型的“数据不变”的系统环境。所以语言范式之于系统模型,是两种语境。


语言选型与系统架构在“数据与逻辑的可变性”上是可以互为补充的。


图书简介https://www.ituring.com.cn/book/2429



相关阅读


程序原本(一):应用开发基础


程序原本(二):应用开发技术


程序原本(三):开发视角下的工程问题


程序原本(四):系统的基础部件


2020 年 2 月 14 日 14:001704

评论

发布
暂无评论
发现更多内容

一年多远程工作经验,说说真实的感受

盛安德软件

【写作群星榜】7.24~7.31 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

并发编程基础原理

刚刚🏂

信创舆情一线--抖音、微信读书被判侵害用户个人信息权益

统小信uos

dubbo-go 中使用 sentinel

apache/dubbo-go

dubbo sentinel Go 语言

这16道Redis最常见面试问题,你能回答上来几个?

火羊哥

Java

Android Development最佳实践

teoking

机器学习基石第一节 学习笔记

半亩房顶

Machine Learning

别在网上乱找代码了,找了一段代码突然爆了!!!

导导

Java

新生必备清单:不想成为虚度青春的“小透明”,手机应该怎样选?

脑极体

继oneAPI之后,英特尔为异构计算跨架构编程再添“利器” 发布全新机器编程系统

最新动态

职场求生攻略答疑篇之 2 —— 无所适从的向上沟通

臧萌

Go: 并发访问 Map — Part III

陈思敏捷

并发 map sync Go 语言

秒杀系统

俊俊哥

秒杀

密码朋克的社会实验(三):比特币发明了什么

腾讯安全云鼎实验室

比特币 区块链 密码学

ARTS打卡Week 09

teoking

零代码可视化开发平台iVX是什么?

代码制造者

编程语言 可视化 零代码 iVX

数据结构与算法之排序

shirley

排序算法

我收集的 3 个企业经营“失败”案例

霍太稳@极客邦科技

Java七种排序算法以及实现

狸猫换太子

Java 排序算法 实现

JVM系列:通过一个例子分析JIT的汇编代码

简爱W

最牛逼的Java框架,没有之一

我是苞谷

机器学习基石第三节 学习笔记

半亩房顶

Machine Learning

机器学习基石第五节 学习笔记

半亩房顶

Machine Learning

如何进行需求梳理及埋点方案设计

易观大数据

格一格你的情欲念

王进行

机器学习基石第二节 学习笔记

半亩房顶

Machine Learning

机器学习基石第四节 学习笔记

半亩房顶

Machine Learning

【面试必问】Spring中的事务管理详解

只喝纯牛奶

LeetCode题解:189. 旋转数组,使用新数组Copy,JavaScript,详细注释

Lee Chen

大前端 LeetCode

webRTC框架下的视频主动丢帧

fumingwang

音视频 WebRTC

「云智公开课」百度沧海·存储

「云智公开课」百度沧海·存储

程序原本(五):海量数据运算中公开的秘术_文化 & 方法_周爱民_InfoQ精选文章