将 couchdb 持久性添加到节点中的套接字 json 源

Adding couchdb persistence to a socketio json feed in node

本文关键字:套接字 json 节点 couchdb 持久性 添加      更新时间:2023-09-26

我目前正在研究如何将持久性添加到节点中的实时 Twitter json 提要中。我已经设置了流,它正在向客户端广播,但是我如何将此数据存储在 json 数据库(如 couchdb)中,以便我可以在客户端首次访问页面时访问存储 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 而不是数据库中每个文档的内容 - 当它不唯一时,它会在第一个数据库条目后失败。

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

干杯。

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

我是nano的作者,这是完成您大部分需求的测试之一:

  • https://github.com/dscape/nano/blob/master/tests/view/query.js

对于实际的查询语义,以及让您更多地了解CouchDB的工作原理,我建议您阅读:

  • http://guide.couchdb.org/editions/1/en/index.html

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

如果你想使用模块与CouchDB交互,我建议使用cradle或nano。

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

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