0

我目前正在研究如何将持久性添加到节点中的实时 twitter json 提要。我已经设置了流,它正在向客户端广播,但是我如何将这些数据存储在诸如 couchdb 之类的 json 数据库中,以便在客户端第一次访问页面时访问存储 json?

我似乎无法理解couchdb。

var array = { 
    "tweet_id": tweet.id,
    "screen_name": tweet.user.screen_name,
    "text" : tweet.text, 
    "profile_image_url" : tweet.user.profile_image_url 
};

db.saveDoc('tweet', strencode(array), function(er, ok) {
    if (er) throw new Error(JSON.stringify(er));
    util.puts('Saved my first doc to the couch!');
});

db.allDocs(function(er, doc) {
    if (er) throw new Error(JSON.stringify(er));
    //client.send(JSON.stringify(doc));
    console.log(JSON.stringify(doc));
    util.puts('Fetched my new doc from couch:');
});

这是我用来尝试保存/检索推文数据的两个片段。该数组是一条单独的推文,每次收到新推文时都需要保存到沙发上。

我不理解 saveDoc 的 id 部分——当我使它唯一时,db.allDocs只列出 ID 而不是数据库中每个文档的内容——当它不是唯一的时,它在第一个 db 条目后失败。

有人可以解释将这种类型的json数据保存和检索到couchdb的正确方法吗?我基本上想在客户端第一次查看页面时加载整个数据库。(数据库将少于 100 个条目)

干杯。

4

2 回答 2

1
  • 您需要在数据库中插入文档。您可以通过插入来自 twitter API 的 JSON 来做到这一点,也可以一次插入一个状态 ( for loop)
  • 您应该创建一个公开该信息的视图。如果您直接从 Twitter 保存 JSON,您将需要emit在地图函数中多次保存
  • 那里的操作(摄取和查询)不是一回事,因此您应该在程序的不同时间真正执行它们。
  • 您应该考虑运行一个更新数据库的 bg 进程(可能像 a 一样简单setInterval)。或者您可以使用clarinet(http://github.com/dscape/clarinet) 之类的东西直接解析 Twitter 流 API。

我是nano的作者,这里是满足您大部分需求的测试之一:

对于实际的查询语义和您了解 CouchDB 如何工作的更多信息,我建议您阅读:

我觉得它很有用,我建议你买这本书:)

于 2012-05-30T11:18:50.253 回答
0

如果您想使用模块与 CouchDB 交互,我建议您使用cradlenano

您还可以使用在 Node.js 中找到的默认 http 模块向 CouchDB 发出请求。缺点是默认的 http 模块往往有点冗长。有一些替代方案可以为您提供更好的 API 来处理 http 请求。这个要求真的很受欢迎。

要获取数据,您需要向视图发出 GET 请求,您可以在此处找到更多信息。如果要创建文档,则必须对数据库使用 PUT 请求。

于 2012-05-30T10:42:50.473 回答