0

私は現在、ノードのリアルタイム 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:');
});

これらは、ツイート データを保存/取得するために使用している 2 つのスニペットです。配列は 1 つの個別のツイートであり、新しいツイートを受信するたびにカウチに保存する必要があります。

saveDoc の id 部分がわかりません。一意にすると、db.allDocsは ID のみをリストし、データベース内の各ドキュメントの内容はリストしません。一意でない場合、最初の db エントリの後で失敗します。

このタイプのjsonデータをcouchdbに保存して取得する正しい方法を誰かが親切に説明できますか? 基本的に、クライアントが最初にページを表示したときにデータベース全体をロードしたいと考えています。(データベースのエントリは 100 未満になります)

乾杯。

4

2 に答える 2

1
  • ドキュメントをデータベースに挿入する必要があります。これを行うには、twitter API から取得した JSON を挿入するか、一度に 1 つのステータスを挿入することができます ( for loop)
  • その情報を公開するビューを作成する必要があります。JSON を Twitter から直接保存した場合emit、map 関数で数回保存する必要があります。
  • これらの操作 (取り込みとクエリ) は同じものではないため、実際にはプログラム内で異なるタイミングで実行する必要があります。
  • データベースを更新する bg プロセス (おそらく a のような単純なものsetInterval) を実行することを検討する必要があります。または、(http://github.com/dscape/clarinet) のようなものを使用してclarinet、Twitter ストリーミング API を直接解析することもできます。

私はnanoの作成者であり、必要なことのほとんどを実行するテストの 1 つを次に示します。

実際のクエリのセマンティクスについて、また CouchDB がどのように機能するかについてもう少し学ぶために、以下をお読みになることをお勧めします。

役に立つと思いますので、本を購入することをお勧めします:)

于 2012-05-30T11:18:50.253 に答える
0

モジュールを使用して CouchDB と対話する場合は、cradleまたはnanoをお勧めします。

Node.js にあるデフォルトの http モジュールを使用して、CouchDB にリクエストを送信することもできます。欠点は、デフォルトの http モジュールが少し冗長になる傾向があることです。http リクエストを処理するためのより優れた API を提供する代替手段があります。リクエストは大人気です。

データを取得するには、ビューに対して GET リクエストを行う必要があります。詳細については、こちらを参照してください。ドキュメントを作成する場合は、データベースへの PUT リクエストを使用する必要があります。

于 2012-05-30T10:42:50.473 に答える