From fbccbd73e0bd4b00ce097a85d92696a49d701aca Mon Sep 17 00:00:00 2001 From: Chris Anderson Date: Sun, 3 Aug 2008 14:17:58 -0700 Subject: [PATCH] created some utility scripts --- utils/remap.rb | 27 +++++++++++++++++++++++++++ utils/subset.rb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 utils/remap.rb create mode 100644 utils/subset.rb diff --git a/utils/remap.rb b/utils/remap.rb new file mode 100644 index 0000000..f42c5d5 --- /dev/null +++ b/utils/remap.rb @@ -0,0 +1,27 @@ +require 'rubygems' +require 'couchrest' + +# set the source db and map view +source = CouchRest.new("http://localhost:5984").database('source-db') +source_view = 'mydesign/view-map' + +# set the target db +target = CouchRest.new("http://localhost:5984").database('target-db') + + +pager = CouchRest::Pager.new(source) + +# pager will yield once per uniq key in the source view + +pager.key_reduce(source_view, 10000) do |key, values| + # create a doc from the key and the values + example_doc = { + :key => key, + :values => values.uniq + } + + target.save(example_doc) + + # keep us up to date with progress + puts k if (rand > 0.9) +end diff --git a/utils/subset.rb b/utils/subset.rb new file mode 100644 index 0000000..dd5d2e7 --- /dev/null +++ b/utils/subset.rb @@ -0,0 +1,30 @@ +require 'rubygems' +require 'couchrest' + +# subset.rb replicates a percentage of a database to a fresh database. +# use it to create a smaller dataset on which to prototype views. + +# specify the source database +source = CouchRest.new("http://localhost:5984").database('source-db') + +# specify the target database +target = CouchRest.new("http://localhost:5984").database('target-db') + +# pager efficiently yields all view rows +pager = CouchRest::Pager.new(source) + +pager.all_docs(1000) do |rows| + docs = rows.collect do |r| + # the percentage of docs to clone + next if rand > 0.1 + doc = source.get(r['id']) + doc.delete('_rev') + doc + end.compact + puts docs.length + next if docs.empty? + + puts docs.first['_id'] + target.bulk_save(docs) +end +