0

ソファレストを使用するアプリケーションcouchdbで使用するデータベースをセットアップしました。 ruby on rails

現在、データベースには約 100K のレコードがあり、タイムスタンプを整数形式で格納するフィールドを追加したいと考えています。
ループで更新しようとすると、リクエストのタイムアウトが発生します。

新しいフィールド/プロパティを couchdb に追加する最良の方法は何ですか?

コード

pages = Page.all
pages.each do |p|
  p.update_attributes(:created_at_to_i => p.created_at.to_i)
  puts p.created_at_to_i.inspect
end

痕跡

>> Page.update_timestamp
RestClient::RequestTimeout: Request Timeout
    from /usr/local/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:184:in `transmit'
    from /usr/local/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute'
    from /usr/local/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute'
    from /usr/local/lib/ruby/gems/1.8/gems/couchrest-1.1.2/lib/couchrest/rest_api.rb:89:in `execute'
    from /usr/local/lib/ruby/gems/1.8/gems/couchrest-1.1.2/lib/couchrest/rest_api.rb:45:in `get'
    from /usr/local/lib/ruby/gems/1.8/gems/couchrest-1.1.2/lib/couchrest/database.rb:260:in `view'
    from /usr/local/lib/ruby/gems/1.8/gems/couchrest-1.1.2/lib/couchrest/design.rb:52:in `view_on'
    from /usr/local/lib/ruby/gems/1.8/gems/couchrest_model-1.1.2/lib/couchrest/model/views.rb:142:in `fetch_view'
    from /usr/local/lib/ruby/gems/1.8/gems/couchrest_model-1.1.2/lib/couchrest/model/views.rb:135:in `fetch_view_with_docs'
    from /usr/local/lib/ruby/gems/1.8/gems/couchrest_model-1.1.2/lib/couchrest/model/views.rb:104:in `view'
    from /usr/local/lib/ruby/gems/1.8/gems/couchrest_model-1.1.2/lib/couchrest/model/document_queries.rb:12:in `all'
    from /var/www/monitoring_couch/app/models/page.rb:309:in `update_timestamp'
    from (irb):2
4

1 に答える 1

0

新しいプロパティを追加するには、各ドキュメントをロードして変更し、データベースに保存し直す必要があります。一括更新 apiを使用してそれを行うこともできますが、わずか 100k の場合、余分な手間をかける価値はないと思います。

タイムアウトが発生したときに取得する更新スクリプトとトレースバックを投稿してください。

于 2011-11-18T12:11:34.847 に答える