イベントjsonオブジェクトのリストを保存または更新する次のメソッドがあります。couchdb の一括 create_or_update 関数が見つかりませんでした。各オブジェクトをクエリして、データベースに存在するかどうかを確認し、それに応じて作成/更新する必要がありました。残念ながら、これは非常に非効率的です。1725 個のイベントを処理するのに 6 分かかります。誰かがより良いデザインを提案できますか? 数秒で完了する必要があります。私のcouchdbは実際にはssl cloudantデータベースであり、私のアプリはHerokuでホストされています。これは、実際にcloudantと組み合わされているherokuのアプリとは異なります。
def self.store(bulk, resource)
JSON::Validator.validate!(SCHEMA, bulk, :list => true)
bulk.each{ |event|
response = resource.get("/database-dev/_design/Event/_view/byEID?key=\"#{event['eid']}\"")
if (response["rows"].nil? || response["rows"].empty?) then
o = [('a'..'z'),('A'..'Z'),(0..9)].map{|i| i.to_a}.flatten
o.push('-','_')
event['_id'] = (0..50).map{ o[rand(o.length)] }.join
event['resource'] = 'Event'
resource.post('/database-dev', event.to_json)
else
resource.put("/database-dev/#{response['rows'][0]['id']}", event.to_json)
end
}
end