In a NoSQL DB you probably have no schema. I will not argue here about structured/semistructured/unstructured choices. That is a subject for a bigger discussion for which my simple answer is "- it depends". But I will argue here that your Views in CouchDB or whatever you call the map/reduce functions in your favorite noSQL must be kept in a version control repository.
I will also argue that any migrations applied to Views should automatically generate the latest version of them and should be committed to your version control system.
I should not have to say it but all of the above should be automated for sure.
Storing a compressed or minified source code (in couchdb that would be javascript) does not make sense to me so I would vote for storing the extracted views correctly formatted. A one-liner will be enough to achieve this. Note that below curl uses k(to ignore ssl fake certificate of this integration environment), s (to avoid showing the progress) and X (to specify the method in this case a GET). Python formats the output.
$ curl -ksX GET "https://user:passwd@couch.sample.com:6984/mydb/_design/MyDocument "| python -mjson.toolGranted this is still not that great as the javascript functions do not get formatted but yet better than the original output of the command without the python help.
To use the design document later on in couchDB you need to PUT it in the couchdb server database, however the "_rev" attribute must be removed first. Again nothing Unix Power Tools won't be able to do. Here is how to do a correct backup:
#extract design document from db curl -ksX GET "https://user:passwd@couch.sample.com:6984/mydb/_design/EmailDocument" | python -mjson.tool | sed '/\"_rev\"/d' > mydb-couchdb-design-Document.jsonHere is how you would put the design document back into a couchdb database (restore). Note how we need the revision to be able to delete and then after deleted we just PUT our saved copy. We can probably do the same with just one POST instead of DELETE+PUT but you get the idea about the power of unix tools here.
$ revision=`curl -ksX GET "https://user:passwd@udesktop2.sample.com:6984/mydb/_design/MyDocument" | sed 's/.*_rev\":\"\([^\"]*\).*/\1/g'` $ curl -ksX DELETE "https://user:passwd@udesktop2.sample.com:6984/mydb/_design/MyDocument?rev=$revision" $ curl -ksX PUT "https://user:passwd@udesktop2.sample.com:6984/mydb/_design/MyDocument" --data-binary @mydb-couchdb-design-Document.jsonNow you can keep your views in version control and should you need a blank database it is just a matter of creating it and running the previous code to create the views:
#extract design document from db curl -ksX GET "https://user:passwd@couch.sample.com:6984/mydb/_design/EmailDocument" | python -mjson.tool | sed '/\"_rev\"/d' > mydb-couchdb-design-Document.json #delete database curl -ksX DELETE "https://user:passwd@udesktop2.sample.com:6984/mydb" #create database curl -ksX PUT "https://user:passwd@udesktop2.sample.com:6984/mydb" #put the design document in db 630 curl -ksX PUT "https://user:passwd@udesktop2.sample.com:6984/mydb/_design/MyDocument" --data-binary @mydb-couchdb-design-Document.json
No comments:
Post a Comment