本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2013/02/heroku-dataclips
借助于最近上线的Dataclips 2.0的新特性,Heroku在其路上又迈出了重要的一步:
“释放数据的价值”。就像GitHub Gists支持相关代码片段的共享与协作一样,Dataclips也可以对你的数据做同样的事情。
时至今日,人们已经达成共识:单个应用的价值有限,而不断消费与使用的数据才真正具有价值。开放这些数据不是一件易事,要考虑到开放性以及对不断增长的服务的支持,这些服务会混搭现有的数据源来创建出更大的内容,结果就是1+1>2。
Heroku Postgres团队花了近一年的时间来整理Dataclips的架构与实现。InfoQ有幸采访到了Heroku Craig Kerstiens持久化小组的产品经理。本文概要介绍了Dataclips的诸多方面与特性,他们不仅对于开发者很有价值,对于业务与决策者来说也是非常重要的。
Craig说到:
组织的数据几乎是最有价值的资产。但遗憾的是,这些数据通常会被放到一个数据库中,只能由少数有权限的人通过很少的几种方式来访问。很多时候,报告都是手工生成的,并被粘贴到邮件中;他们构建的仪表盘很快就会过时,根本就没法回答人们的问题。
这个想法让Heroku重新开始构建Dataclips,提供易于安装和使用的产品,并且着眼于未来的众多应用。
为了让大家对Dataclips有个感性的了解,我们展示一个由Code for America开发的应用,这个示例表示旧金山餐厅与食品公司的卫生检查分数。Code for America搜集并聚合了一些公开数据,Dataclips是分享这些数据的一种手段。
比如说,“最近的业务分数”:
<iframe width="800" height="400" _tmplitem="1" src="https://dataclips.heroku.com/aniexnddtuqpmtjhmuvdgrqprjns/embed?result=7&version=1"></iframe>
你可以通过dataclips.heroku.com的帐号或是Postgres管理页面(提供恰当的SQL语句)来直接创建Dataclips。唯一的限制在于一个Dataclips只能返回30,000行,超出的数据会被截断。
Dataclips可以用在嵌入的iframe中,就像上面这个示例一样,也可以用作独立的HTML页面。我们可以通过上面这个示例看到SQL、版本以及Dataclips的修订历史,可以通过邮件、Twitter或是Google docs进行分享。通过向URL追加文件扩展CSV、XLS(Excel)或是JSON,你可以使用这些格式来下载Dataclips。
https://dataclips.heroku.com/aniexnddtuqpmtjhmuvdgrqprjns.json {"fields":["name","address","city","score"], "values":[ ["MINI BAR SF, LLC","837 DIVISADERO ST ","San Francisco","100"], ["AT&T - MAIN KITCHEN/SUITE LEVEL [145084]","24 WILLIE MAYS PLAZA 4.10.03 ","San Francisco","100"], ["CYBELLE'S PIZZA","719 14TH ST ","San Francisco","100"], ... ]}
https://dataclips.heroku.com/aniexnddtuqpmtjhmuvdgrqprjns.csv name,address,city,score "MINI BAR SF, LLC",837 DIVISADERO ST ,San Francisco,100 AT&T - MAIN KITCHEN/SUITE LEVEL [145084],24 WILLIE MAYS PLAZA 4.10.03 ,San Francisco,100 CYBELLE'S PIZZA,719 14TH ST ,San Francisco,100 PACIFIC UNION CLUB,1000 CALIFORNIA ST ,San Francisco,100 ...
其他格式也会在未来得到支持,比如说XML与YAML。但诸如google-data-table格式是非常适合于与各种Google图表进行整合的。目前,我们可以通过ImportData(URL)函数将CSV格式导入到Google Calc电子表格中,每小时刷新一次。
类似于Gists,Dataclips也支持版本和修订。每次查询发生变化时,新的Dataclips修订就会创建出来(也会列在dataclip-page上),对于每个变化的结果(由于数据发生了变化),新的版本也会产生。可以通过向URL追加?revision=1&version=5查询参数来访问不同的修订与版本。类似于Gists,Dataclips也可以创建分支,然后独立使用。
Dataclips的实现是相当直接的。Dataclips是通过运行在heroku基础设施之上的Ruby应用来提供服务的,它会定期(目前大约是一分钟一次)在只读事务中运行配置好的查询并获取结果。脚本会监控运行时与查询,并动态调整频率。查询的结果会存储在版本化的表中以供快速访问,它独立于原来的数据库。其他格式在S3中创建并缓存下来。HTML视图并不会缓存,而是即时渲染。
Craig就如何使用Dataclips给出了很多用例。Dataclips是自更新的,存储的版本化信息可由决策者使用。对于开发者来说,共享数据变得易如反掌。Dataclips可用作稳定的API来编写原型,甚至是完整的应用。一般来说,他们提供了向混搭与其他使用场景公开数据的能力。另一个有趣的用例是人们可以通过Dataclips学习SQL,只需做个分支,然后编辑SQL即可返回结果。
Dataclips的路线图有很多维度。比如说支持更多的格式或是为HTML视图提供样式等显而易见的计划。开启其他的关系数据库很简单,将Dataclips集成到NoSQL插件提供者中将会非常有趣,当然肯定也会很复杂。另一个有趣的方向是向Dataclips添加社交特性,如评论、评级等,这最终会创造出一个Dataclips市场(有免费与付费版本)。自定义URI尚未有规划。更加频繁地使用Dataclips也意味着需要有相应的API以编程的方式来创建他们。
到目前为止,来自用户的反馈还是非常积极的,Dataclips的一些有趣的用例有欺骗检测可视化、用户注册,以及作为仪表盘的数据源等。
对于商业化,Heroku Postgres还计划了额外一些特性,比如说只能由Heroku用户才能访问Dataclips。免费版本的安全性通过不可猜测的URI来保证。