Ich habe die folgende Methode, die eine Liste von Ereignis JSON-Objekten speichert oder aktualisiert. Ich konnte für couchdb keine Bulk-Funktion create_or_update finden, ich musste jedes Objekt abfragen und sehen, ob es in der Datenbank existiert und dementsprechend erstellt/aktualisiert wird. Leider ist dies sehr ineffizient, es dauert 6 Minuten für 1725 Ereignisse verarbeitet werden. Kann jemand ein besseres Design vorschlagen? Es muss in ein paar Sekunden getan werden. Meine Couchdb ist eigentlich eine ssl Cloud-Datenbank, und meine App ist auf Heroku gehostet, die anders ist als die App auf Heroku, die tatsächlich mit Cloudant kombiniert wird.Bulk update_or_create Optimierung in CouchDb mit Ruby
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