摘要: Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop非常擅长分布式计算,能充分利用集群的威力进行高速运算和存储。Marklogic运用了Hadoop的思想,却有诸多不同,今天借助Kurt Cagle的观点,了解一下它们之间的优劣 Data Hubs: MarkLogic vs. Hadoop
Marklogic使用Hadoop作为其内容处理核心MLCP,这一举措作为需要多线程处理大量文档数据的Marklogic来说是非常合适的。Hadoop是一个非Map/Reduce方案,它是一个很好的处理框架。但却不是最好的,在处理转换关系和依赖关系方面,它有优势。问题出在Hadoop被吹捧为能处理所有复杂数据中心的下一代主流数据库技术之后,它是一个大型的、复杂的系统,专注于移动数据的机制,这需要大量的开发人员编写复杂的ETL代码,特别是处理大量的来自标准数据库的异构数据源。
数据集成需要上下文环境,你得知道数据从何而来,需要知道他们如何通过主键关联,有时候数据表中的主键还不明确。你还需要命名空间,因为数据来源有时候是不好追溯的。
Hadoop除了在少数情况下,对XML支出的都不好。其查询和索引往往很慢,因为它总是批量处理这类请求,无法做到实时处理。如果将过去5年的会议录音记录迁移到Hadoop,将是一个伟大的技术,但是如果你要拿这些数据做点播之类的实时处理,那还是不必了。
每个人都可以有偏见,对于一个使用Marklogic近10年的程序员,会认为MarkLogic有一个陡峭的学习曲线。不过对于一个数据集群来说,Marklogic还是有很多优势的。
True data hub integration requires sophisticated transformation capabilities, semantic master key management and rich security. Hadoop has none of these things.
多租户技术是处理海量数据的关键,因为需要同时存储来自多个客户端不可预知的数据,还要防止黑客攻击。Marklogic的安全机制来自对role和permisson的合理划分。它所能达到的安全级别也是少数几个SQL/NoSQL数据库所能实现的。有时候安全策略还可以针对某一字段,这对于使用语义存储的数据很有用。当然这也成为了Marklogic被政府采用的主要原因。Hadoop没有这么细粒度的安全控制。
Marklogic可以随意存储和查询XML或JSON格式的数据,可以使用一个通用的接口处理与格式无关的数据。利用已有的JavaScript或XQuery API可以轻松地查询或更新XML和JSON数据,Marklogic已经集成了基于Google V8的JavaScript引擎。而且,Marklogic还支持node.js, Java, Ruby, Python, C++ 和 C#,如果你愿意,甚至可以通过使用基于RESTful的API来实现跨语言。Marklogic支持ODBC驱动,这样你就可以把它当成是一个关系型数据库。 Hadoop也有针对不同语言的插件,不过,由于Java版本的不同,Hadoop版本的不同和集成API的多变,使得连接性和可移植性变得困难。
MarkLogic’s bet was simple - make JavaScript a first class language and JSON a first class data format, and the developers will come. By all indications, they are.
ETL(提取转换加载)过程需要强大的可变换能力。大多数基于Java的实现仍使用发表在2001年的Xalan XSLT 1.0处理器,尽管XSLT 3.0是刚刚发布,但XSLT 2.0已经存在了将近十年。XSLT 2.0是一款强大转换工具,你可以使用Marklogic来容易地转换XML和JSON数据。这种多变性是Hadoop所没有的,即使出现了,也是Marklogic先有此功能之后。
For transformations, Hadoop utilizes Xalan, released nearly fifteen years ago and using XSLT1. MarkLogic has most of the features of XSLT 3, all of XQuery, JavaScript and SPARQL.
Hadoop可以使用建立索引的方法来向外扩展,人们潜意识地认这可以提供数据的可伸缩性。这里引入了分布式文件系统,一可以向外扩展多个节点,但是访问时间也会随之加长。 Marklogic也使用了分布式文件系统,不过除了存取内容,它还肩负着索引内容。Marklogic有着出色的索引技术,HDFS被认为是缓慢的技术,因而采用了多层数据节点。MarkLogic也因为这个架构,具有了很好的可伸缩性,并能使集群的节点能够动态地进行扩张或者收缩。
人们在研究数据时,往往会看它的元数据,里面包含字段名,日期等信息。然而,对对数据集成来说,通常更重要的是能够将各种数据库的主键和外键相匹配。实践证明,使用RDF可以容易地实现,这个Resource Description Framework(数据描述框架)使用了像R2RML 这样的映射约定,它很容易创建不同的数据系统之间的相关概念映射。 另一个大数据的需求是有效处理参考数据管理(RDM)或元数据管理系统(MTDM)——也称为受控词汇表。一些特殊的项目代表了特定的状态,如性别、婚姻、国籍等。它们往往被用于政府机构,医疗保健,保险类,金融,科研,教育,人际关系等,语义系统非常适合于管理这种类型的信息。
Hadoop不支持版本化(记录随着时间的变化数据)。大多数应用是用不到这个功能的。但对于数据中心来说,却很重要,在一些关键应用如金融交易系统,需要提前预知事务是否已经完成,这就不仅仅是支持事务这么简单了。少数关系型数据库现在已经合并成为了双时态存储,用于财务数据,研究数据,保险行业等。
Data Governance is not just a position in an org chart. It has to be built into the database at a foundational level. Data provenance matters.
几年前,Marklogic确实遇到一个困难——开发人员急缺。那时候懂XQuery的人很少,因此很难在大型项目上用到Marklogic。但Marklogic8以后,3项改进可能会解决这一困境。第一是适用JavaScript,还配有强大的node.js引擎。第二是增加了免费培训课程,从初级到高级全面覆盖。第三是整合API,让你可以轻松地在XQuery和XML, XQuery和JSON, Javascript和XML, JavaScript和JSON, SPARQL 和RDF之间转换。
Hadoop是免费的。Marklogic授权大约是1.8万美元一年。似乎看起来这次Hadoop完胜,但是关注总体拥有成本的话,则不然。Marklogic只需要很少的人员去开发与维护,所耗费的时间也更少,但可以处理的数据却更复杂。只要基础框架搭建好以后,增加功能只会变得越来越简单。 假设有4个开发人员,每人每年的工资是8万美金,组建一个Marklogic数据中心的成本大约是10万美金。一年以后,这个数据库的运营成本大约是2.5万美金。
Licensing costs would seem to skew in Hadoop’s favor. Take total cost of ownership into account, however, and a very different story emerges.
一般来说,Hadoop团队往往需要一些10到15年工作经验的架构师来搭建框架。随然Hadoop没有许可费,但是,你需要MDM系统,转换系统,语义系统,集成,业务流程和规则管理,安全、报告等等。拿到这些许可并将它们整合到Hadoop,你可能花费很多金钱和人力还有时间。
Five years from now, Hadoop should be where MarkLogic is now. Five years from now, MarkLogic will be a true AI database.
就目前而言,Marklogic开发的成本还不明朗,高昂的许可成本,高的维护成本,再加上员工工资,这笔不小的开支对大多数公司来说,还是会选择Hadoop这样免费的产品。