发表本文有一个目的:证明用Orchestrate作为node.js驱动的数据平台来创建node.js应用是如此简单和容易。
如果你是新手,那么我告诉你,Orchestrate服务是一个存储和查询数据的平台。我们支持典型的NoSQL查询:Lucene的全文搜索、键/值和文档、图表和时序性事件。
我们有各种各样查询特性的HTTP API针对仅仅一个HTTP请求。但通常,由于开发人员关注的是工作效率最大化,我们发现用REST客户端将变得更容易,它将这些HTTP调用抽象成我们最喜欢的编程语言。
我们的朋友在Bowery上为Orchestrate写了一个很棒的NodeJS客户端。在GitHub 和NPM上可用。在这篇文章中,Steve Kaliiski (@stevekaliski) 通过构建一个数据服务来创建和更新用户账号来证明orchestrate.js的一些特性。
第一步:建立一个项目
为了能跟得上, 从orchestratejs-example上下载示例代码。示例的程序是由Bowery提供支持的。安装指南在README中。
第二步:连接到Orchestrate
在Orchestrate服务中,每个API key 属于一个“应用”。Orchestrate应用代表系统上租期的单位。
通过本文的代码我们要创建一个叫 “nodejs-usersapp-demo”的Orchestrate 应用。
注意:Orchestrate中应用名称是全球唯一的,所以当你跟着本文代码操作时,请给应用取另外的一个名字。
首先我们将在Orchestrate Dashboard 中创建应用,然后我们要提取生成的API key在代码中使用。
// An API key looks something like: // 3854bbd7-0a31-43b0-aa94-66236847a717 var db = require('orchestrate')('your api key')
第三步:存储一个新用户帐户
当创建一个新用户账号时,你需要确定用户对象的标识符是唯一的。一般地,它是像UUID,用户名或电子邮箱这样东西。
Orchestrate 提供“条件PUT”的操作,意味着开发人员要指定先决条件来确定PUT请求是否能成功给予已经存在的数据集。
Orchestrate KV PUT请求支持两种可能的先决条件:
- 如果匹配-对象的新版本将被存储到集合中,当且仅当“ref”(版本)匹配当前存储在集合中的key。在我们的文档中你可以获取更多关于“ref”的知识。
- 如果不匹配-当且仅当有着相同key的对象不存在时,新对象才会被存储到集合中。
存储一个新的用户账号:
db.put('users', 'steve@bowery.io', { "name": "Steve", "hometown": "New York, NY", "twitter": "@stevekaliski", "password": "my_secret_pass" }, false) .then(function (res) {}) .fail(function (err) {})
我们用键值对形式的JSON对象给user对象插入了一个新的对象。第四个参数是条件。Put方法的第四个参数让客户端告诉Orchestrate当不存在不同的value值时才创建对象,比如说告诉Orchestrate 这是一个新用户。
第四步:获取一个用户的账号
从Orchestrate中读取数据是非常简单的。例如,让我们看一个用户登陆的例子。用户将登陆信息填写在表单中后提交,之后我们的处理代码如下:
app.post('/login', function (req, res) { var body = req.body db.get('users', body.email) .then(function (res) { var user = res.body if (user && someHashFunction(body.password) == user.password) res.end('Logged in!') else res.end('Invalid login.') }) .fail(function (err) { res.end('Oops') }) })
现在如果扩展下我们的应用和用户管理功能,把它变成一个搜索工具,通过它们的家乡来搜索用户。对此,我们可以利用Orchestrate的搜索特性。
db.search('users', 'New York') .then(function (res) {}) .fail(function (err) {})
随着应用用户量的增长,你可能需要考虑将查询结果分页展示:
db.newSearchBuilder() .collection('users') .limit(100) .offset(10) .query('Portland') .then(function (res) {}) .fail(function (err) {})
如果想要更深入的利用Orchestrate的搜索特性,可以看看这篇文章:“Querying the Enron trove with Lucene”。
第五步:连接账户
随着我们应用成长为更具社会化的应用,我们可能需要介绍一些新的特性。通过许多社交网络,用户可能会被友情,兴趣等东西连接起来。因此我们可以利用Orchestrate的图表特性给应用增加此类的数据连接关系。
Orchestrate支持图表功能,这让创建关系变得很容易。让我们考虑两个用户: Steve 和Chris。
Steve已用“steve@bowery.io”创建键值,而Chris已用 “chris@orchestrate.io”创建键值。
他们打算写一篇博客一同发布,在这个社交网络中他们很有可能成为朋友,因此:
db.newGraphBuilder() .create() .from('users', 'steve@bowery.io') .related('friends') .to('users', 'chris@orchestrate.io')
通过构造一个“newGraphReader”,我们可以查看这个关系:
db.newGraphReader() .get() .from('users', 'steve@bowery.io') .related('friends')
下一步
现在你已经掌握了一些Orchestrate的特性,通过查阅NodeJS客户端文档你可以获取更多的信息。
我们的HTTP API文档上同样也有许多有用的信息, 你可以在Dashboard上获取支持或给我们反馈信息,你也可以在HipChat Community channel.上找到我们。访问我们,告诉我们需要改进的地方和你在构建的东西。
最重要的是,用Orchestrate开心的构建优秀的项目。
- #1 冰冰 1397101187000不是很明白,需要什么环境么?