当前搜索:

[置顶] 从函数字面量发现函数式编程

版权声明:本文由本人撰写并发表于2015年3月下半月的《程序员》杂志,原文题目《从字面量发现函数式编程》,本文版权归《程序员》杂志所有,未经许可不得转载。 引言 我相信很多像我一样初次接触函数式编程的程序员来说,对于“函数字面量”这个概念会感到迷惑和不解。伴随着深入地学习,在清晰地理解了这个概念之后,我进行了一些梳理和回溯,作为函数式编程思想延伸到最基层的语言元素,我深刻地觉得“函数字面量”这...
阅读(7389) 评论(3)

[置顶] HBase高性能复杂条件查询引擎

版权声明:本文由本人撰写并发表于2014年7月份的InfoQ,HBase的PMC成员Ted Yu先生参与了审稿并于给予了肯定。该方案设计之初仅寄希望于通过二级索引提升查询性能,由于在前期架构时充分考虑了通用性以及对复杂条件的支持,在后来的演变中逐渐被剥离出来形成了一个通用的查询引擎。HBase在大数据领域的应用越来越广泛,成为目前NoSQL数据库中表现最耀眼,呼声最高的产品之一,但就应对复杂条件的查询来说,一般认为它并不是非常适合,熟悉HBase的开发人员对此应该有一定的体会,但是基于普遍的需求,开发者们希...
阅读(29022) 评论(28)

[置顶] 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案

版权声明:本文由本人撰写并发表于2012年9月份的《程序员》杂志,原文题目《一种支持自由规划的Sharding扩容方案——主打无须数据迁移和修改路由代码》,此处作为本系列的第五篇文章进行转载, 本文版权归《程序员》杂志所有,未经许可不得转载!作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段...
阅读(55305) 评论(53)

[置顶] 从MVC框架看MVC架构的设计

从MVC框架看MVC架构的设计尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点。本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些问题的,揭示其中所折射出的设计思想与设计理念。MVC回顾作为一种经典到不能再经典的架构模式,MVC的成功有其必然的道理,这个道理不同的人会有不同的解读,笔者最认同的一种观...
阅读(78594) 评论(85)

[置顶] 领域驱动设计(Domain Driven Design)参考架构详解

领域驱动设计(Domain Driven Design)参考架构详解摘要本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces、Applications和Domain三层以及包含各类基础设施的Infrastructure。本文会对架构中一些重要组件和问题进行讨论,给出一些分析结论。本文原文连接:http://blog.csdn.net/b...
阅读(43989) 评论(12)

再谈Scala集合

集合!集合!一个现代语言平台上的程序员每天代码里用的最多的大概就是该语言上的集合类了,Scala的集合丰富而强大,至今无出其右者,所以这次再回过头再梳理一下。集合“族谱”还是先上张图吧,这是我找到的最好的一个关于Scala集合的图了,出自:http://lkumarjain.blogspot.co.id/2015/01/scala-collection-framework.html :一致的构建风格...
阅读(38) 评论(0)

Pull模式下流计算频率与周期相关性的分析

本文讨论的话题有一些特定的背景,这里的“流计算”具体指的是以Spark Streaming为代表的Micro Batch一类的流式计算框架,因此会涉及到Batch Duration、Window以及Slide等概念。在架构层面上,数据流的走向是:数据采集组件以Pull的模式采集数据后推送给消息队列,流式处理组件以Pull的模式从消息队列中获取数据,处理之后写入NoSQL数据库,最后,前端的数据展示组...
阅读(399) 评论(0)

BlockingQueue在任务调度中的精彩应用

问题来了…我们正在构建的系统需要从外部第三方系统中采集数据,受不可控的外部环境的影响,我们的数据采集工作经常被阻塞,一种典型的情况是:某个目标数据库因为要同时处理多个外围系统叠加的查询请求而经常响应缓慢,从而导致我们的Job严重超时,而这个Job原有的设计是每5分钟执行一次,每次执行时会从目标数据库中查询最近5分钟内的数据,通常情况下这种简单的设计没有问题,但是当前一个Job严重超时时,后续启动的J...
阅读(634) 评论(0)

Maven War 插件Classes文件夹打为Jar包的Bug与解决方法

有时候我们需要利用Maven Resource管理的过滤功能将某些文件中的${XXX}变量在构建时进行动态替换,但同时我们不希望这些文件被加入到jar包中,因为它们是在jar包外或者只是部署时有用,这个需求在Maven的Jar插件中有对应的功能支持,即标签。但是在War插件中,就没有这么幸运了。War插件的配置中有一个配置项,当项目中类和资源...
阅读(542) 评论(0)

Why Should HBase RegionServer & Hadoop DataNode Colocate?

Some basic background information first, HBase, as a distributed NoSQL database, its slave (worker) node is named “RegionServer”, all data reading, writing or scanning workloads are on these RegionServ...
阅读(851) 评论(0)

Scala之自身类型(Self Type)与蛋糕模式(Cake Pattern)

目录设计一辆车 第一版的实现基于继承 第二版的实现基于组合 引入自身类型Self Type 引入蛋糕模式Cake Pattern 利弊得失 本文基于Gregor Heine分享的PPT《Scala Self-Types》注解式地介绍自身引用(Self Type)和蛋糕模式(Cake Pattern),原PPT解释地非常好,感兴趣的朋友可以自行下载阅读。设计一辆车一辆汽车往往会包含这样一些组件: En...
阅读(2184) 评论(0)

站在新语言平台上再谈"组合"与"继承"

长久以来,OO编程思想的一个重要信条是:多用组合,少用继承,这被广为接受和认可。Scala引入Trait(特质)之后,这一点“似乎”受到了冲击,你可以看到,在很多Scala代码里出现了通过继承多个Trait为一个Class混入(追加)新功能的案例,而其中有不少案例是过去我们在传统OO语言(例如Java)中不会或不建议的做法,因为看上去那确实是在滥用继承。举个简单的例子,日志功能是非常普遍的需求,传统...
阅读(1894) 评论(1)

我们为什么放弃SBT回归Maven

显然,我是在说Scala项目。在我们讨论这个话题时,SBT的稳定版本是0.13,我想再过几年,本文提及的问题会一一得到解决,从而让SBT成为一个真正成熟强大的构建工具。在我们目前开发的系统中,有一个基于AKKA的组件,使用Scala语言进行编程。绝大多数情况下,构建Scala项目首选的工具是SBT,作为新一代的构建工具,SBT吸收了众多前辈的优点,简单易用,能够满足基本的应用场景。但是SBT确实还不...
阅读(4436) 评论(5)

Scala之::的研究

一个很细节的问题,简单总结一下。::在Scala里有两种含义,一种是List集合的一个方法,用于把一个元素添加到集合的前面;另一种表示一个非空的List集合,往往应用于模式匹配中。第一种用法: List的一个方法,用于在头部添加新元素示例代码1 :: List(2, 3) = List(2, 3).::(1) = List(1, 2, 3)这种写法在Scala里极为常见,但是会让初学者感到困惑:既然...
阅读(1508) 评论(0)

基于Akka-Streams的HTTP代理的实现

Akka-Streams是一个让人激动的Reactive Streams的框架,Akka-Http也是构建在其之上,除了内置背压模式的支持,使用其DSL构建一个Graph也是一个让人惊艳的过程。对于Akka-Streams的介绍会在后续的文章中逐一展开,本文只奉上一段代码,实现的是HTTP代理功能,同时可以对请求和响应做一些修饰。import akka.NotUsed import akka.act...
阅读(3012) 评论(1)

OpenTSDB安装极简备忘

1. Downloadhttps://github.com/OpenTSDB/opentsdb/releases 2. Install Depenency: Gnuplotyum -y install gnuplot 3. Installrpm -ihv opentsdb-2.2.1.rpm 4. Configurevim /etc/opentsdb/opentsdb.conf tsd.st...
阅读(2121) 评论(3)

Scala之集合上常见的函数式风格的操作汇总

目录过滤相关的操作 filter 解释 示例 partition 解释 示例 find 解释 示例 takeWhile 解释 示例 映射相关的操作 map 解释 示例 flatMap 解释 示例 示例 扁平化相关的操作 flatten 解释 示例 折叠相关的操作 reduceLeft 解释 示例 reduceRight 解释 示例 foldLeft 解释 示例 foldRight 解释 示例正文函数...
阅读(3145) 评论(0)

AKKA-HTTP DSL源码解读

AKKA-HTTP的DSL设计简洁而优雅,让人禁不住一窥其内部的实现,内部浓浓的函数式编程风格也是学习函数式编程很好参考,因此这部分代码非常值得仔细咀嚼一番。我们先看一个DSL的应用代码示例:import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model._ import akk...
阅读(3574) 评论(0)

Actor系统的错误处理

Actor的层次结构 Guardian Actor Actor路径 一个Actor层次机构的示例 崩溃了怎办 监管策略 指令 默认策略 Actor的生命周期 Actor的消亡 自愈系统 错误的核心 超时 Death Watch 总结 本文原文标题:《The Neophyte’s Guide to Scala Part 15: Dealing With Failure in Actor Systems...
阅读(3115) 评论(1)

基于Actor的并发方案

共享可变状态的问题 Actor模型 Actor系统 定义Actor 消息处理 副作用 非类型化 异步和非阻塞 创建一个Actor 发送消息 消息应答 问询Ask机制 有状态的Actor 小结 译者注: 本文原文标题:《The Neophyte’s Guide to Scala Part 14: The Actor Approach to Concurrency》,作者:Daniel Westheid...
阅读(4545) 评论(1)

Scala之小括号和花括号(Parentheses & Crurly Braces)

尽管这是一个非常基础的问题,但是如果不仔细梳理一下,还是会导致在某些场景下误读代码,原因是Scala对这个两兄弟的使用实在是太灵活了,甚至有些“随便”了,让我们分情况逐讨论一下。在调用函数时人们会笼统地说在函数调用时,小括号和花括号是通用的,但实际上,情况会复杂的如果你要调用的函数有两个或两个以上的参数,那么你只能使用“小括号”请看下面的示例:scala> var add = (x: Int,y:...
阅读(4135) 评论(1)

一份关于AKKA的初步的琐碎的笔记

Actor系统An actor is a container for State, Behavior, a Mailbox, Child Actors and a Supervisor Strategy. All of this is encapsulated behind an Actor Reference.Actor像是一个容器,它包含了:它自己的状态,行为,一个Mailbox,一些Child...
阅读(1882) 评论(0)

Spark连接外部数据源解读

本文以连接HBase数据库为例,介绍Spark DataSource API的结构。项目源码:https://github.com/hortonworks-spark/shc 注:由于某些原因,尚无充裕时间进行更深入的解读,本文先着重数据源注册和写入两个流程,后续文章会继续跟进。注册流程位置:org.apache.spark.sql.execution.datasources.hbase.examp...
阅读(4453) 评论(2)

Cassandra的一致性哈希(Consistent Hashing)和虚拟节点(Virtual Nodes)的关系

Cassandra的一致性哈希(Consistent Hashing)和虚拟节点(Virtual Nodes)的关系一致性哈希所要解决的问题一般的哈希算法存在的问题是:当“模”发生变化时,所有的值都需要重新哈希,而一致性哈希算法的特别之处就是它能把这种变化带来的影响降低到最小。关于这一点不再赘述,可以参考http://www.cnblogs.com/haippy/archive/2011/12/10...
阅读(4405) 评论(3)

Scala之若干细小问题汇总

Scala中下划线的应用场景一 Scala中下划线的应用场景二 identity方法的应用场景Scala中下划线的应用场景(一)1、作为“通配符”,类似Java中的*。如import scala.math._2、:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 5:_*)就是将1 to 5当作参数序列处理。3、指代一个集合中的每个元素。例如我们要在...
阅读(2227) 评论(0)
296条 共15页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:3918457次
    • 积分:30516
    • 等级:
    • 排名:第186名
    • 原创:285篇
    • 转载:8篇
    • 译文:3篇
    • 评论:680条
    关于作者
    架构师,CSDN博客专家,目前正从事大数据领域的研究和开发工作,对企业级应用架构、分布式存储、SaaS和领域驱动设计有丰富的实践经验,热衷函数式编程,喜欢摄影和旅行。
    博客专栏