Добавить недвижимость в couchdb - PullRequest
0 голосов
/ 18 ноября 2011

Я настроил базу данных couchdb для использования с приложением ruby on rails с использованием couchrest .

Теперь в базе данных около 100 тыс. Записей, и я хочу добавить поле для хранения метки времени в целочисленном формате.
Попытка обновить его в цикле приводит к истечению времени ожидания запроса.

Каков наилучший способ добавить новое поле / свойство в 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

1 Ответ

0 голосов
/ 18 ноября 2011

Чтобы добавить новое свойство, вам нужно загрузить каждый документ, изменить его и сохранить обратно в базу данных.Вы можете сделать это с помощью массового обновления API , но всего за 100 тыс. Я думаю, что это не стоит дополнительных хлопот.

Пожалуйста, опубликуйте свой скрипт обновления и трассировку, которую вы получите, когда истечет время ожидания..

...