DocumentDBã®è¯ãäŸïŒç°¡åã§ææ ®æ·±ãåé¡ïŒãæºåããæåã®èšäºãžã®è³ªåãžã®åçãããŠããéãDocumentDBãå®è¡ããããªãœãŒã¹ãšæŠå¿µã«ã€ããŠããå°ãèªãããšããå§ãããŸãã
![](http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-06-metablogapi/1031.image_5F00_7F1F5D5E.png)
DocumentDBãªãœãŒã¹ã¢ãã«ã¯ãã¢ã«ãŠã³ãå ã®ç¹å®ã®æ§é ã«æ ŒçŽããããªãœãŒã¹ã®ã»ããã§æ§æãããåãªãœãŒã¹ã«ã¯å®æ°URIã§ã¢ã¯ã»ã¹ã§ããŸãã ãã®ããããã¹ãŠã¯DocumentDBã¢ã«ãŠã³ãã§å§ãŸããŸãã ã¢ã«ãŠã³ãã¯ãããŒã¿ããŒã¹ãæ ŒçŽãããè«çã³ã³ããã§ããåããŒã¿ããŒã¹ã«ã¯ã³ã¬ã¯ã·ã§ã³ãå«ãŸããåã³ã¬ã¯ã·ã§ã³ã«ã¯ãã¹ãã¢ãããã·ãŒãžã£ãããªã¬ãŒãUDFãªã©ãå«ãŸããŸããåããŒã¿ããŒã¹ã«ã¯ãããã¥ã¡ã³ããæäœããäžé£ã®æš©éãæã€ãŠãŒã¶ãŒãããŸãã èš±å¯ã¯ããŒã¯ã³ã®ããã«èŠããã³ã¬ã¯ã·ã§ã³ã¯JSONããã¥ã¡ã³ããšJSã®ããžãã¯ã®ã³ã³ããã§ãã
ã·ã¹ãã ãªãœãŒã¹ïŒã¢ã«ãŠã³ããããŒã¿ããŒã¹ãã³ã¬ã¯ã·ã§ã³ããŠãŒã¶ãŒãã¹ãã¢ãããã·ãŒãžã£ãããªã¬ãŒãUDFïŒã«ã¯åºå®ã¹ããŒã ããããããã¥ã¡ã³ããšæ·»ä»ãã¡ã€ã«ã«ã¯ã¹ããŒã ã«å¯Ÿããå¶éããªãããããŠãŒã¶ãŒãªãœãŒã¹ãšåŒã°ããŸãã äž¡æ¹ã®ã¿ã€ãã®ãªãœãŒã¹ã¯JSONã«ãã£ãŠèšè¿°ãããŸãã
![](https://habrastorage.org/getpro/habr/post_images/262/fd1/3fb/262fd13fb006f70c1e03103d4de99b69.png)
1ã€ã®Azureãµãã¹ã¯ãªãã·ã§ã³å ã«å€æ°ååšããå¯èœæ§ã®ããåã¢ã«ãŠã³ãã¯ãSSDã¹ãã¬ãŒãžãšåºå®åž¯åå¹ ã€ã³ãžã±ãŒã¿ãŒãçµã¿åããããŠãããã§æ§æããããã¬ããã³ã³ãããŒã§ãã ãŠãããã¯ãã€ã§ãè¿œå ãŸãã¯åé€ã§ããŸãã ã¢ã«ãŠã³ãèšå®ã¯ãMicrosoft Azure管çããŒã¿ã«ïŒ portal.azure.com ïŒãŸãã¯REST APIã䜿çšããŠäœæããã³å€æŽã§ããŸãïŒãã©ãããã©ãŒã ã®æ©èœã®å€§éšåã¯REST API管ççšã«å ¬éãããŠããŸãïŒã
ã¢ã«ãŠã³ããæäžäœã®è«çã³ã³ããã§ããå ŽåãããŒã¿ããŒã¹ã¯ã³ã¬ã¯ã·ã§ã³ã³ã³ããããã³ãŠãŒã¶ãŒã§ãã ã¢ã«ãŠã³ãã«ã¯ã奜ããªã ãããŒã¿ããŒã¹ãå«ããããšãã§ããŸãã
ããŒã¿ããŒã¹ã«ã¯ãæ°ã®ã¬ãã€ããããã¿ãã€ããŸã§ãå¿ èŠãªã ãã®ããŒã¿ãä¿åã§ããŸãããã®ã¹ãã¬ãŒãžã¯ãã¹ãŠãåºå®åž¯åå¹ ã®SSDã§åäœããŸãã ãã ããããŒã¿ããŒã¹ã¯åäžã®ãã·ã³å ã§åºå®ãããŠããŸãããæ°åã®ã³ã¬ã¯ã·ã§ã³ãšãã©ãã€ãã®ããã¥ã¡ã³ããæ ŒçŽãã倧èŠæš¡ãªããŒã¿ããŒã¹ã§ããå ŽåããããŸãã
ã³ã¬ã¯ã·ã§ã³ã¯ã次ã®ã¬ãã«ã®ãã¹ãã®ã³ã³ããã§ããããã§ã«JSONããã¥ã¡ã³ãçšã§ãã ã³ã³ãããšããŠã®ã³ã¬ã¯ã·ã§ã³ã¯ãçµ±åã ãã§ãªãããã©ã³ã¶ã¯ã·ã§ã³ãšã¯ãšãªã®ã¹ã±ãŒãªã³ã°ã®åäœãšããŠãæ©èœããŸãã æãç°¡åãªæ¡åŒµæ¹æ³ã¯ãã³ã¬ã¯ã·ã§ã³ãè¿œå ãããããã«SSDã¹ãã¬ãŒãžãåæ£ããããšã§ãã èªåã¹ã±ãŒãªã³ã°ã¯ãã§ã«æ©èœããŠããŸã-ããã¥ã¡ã³ããè¿œå ãŸãã¯åé€ããããšãã³ã¬ã¯ã·ã§ã³ã®ãµã€ãºãèªåçã«å€æŽãããŸãã DocumentDBã¯ãã¬ãã¥ãŒã§ãããæäœã¢ãŒãã¯1ã€ïŒæšæºãã¬ãã¥ãŒïŒã®ã¿ã§ãããã³ã¬ã¯ã·ã§ã³ãã¹ã±ãŒãªã³ã°ã§ããæ倧ãµã€ãºã¯10 GBã§ãã
èªåã€ã³ããã¯ã¹
DocumentDBã§ã¯ãã·ã¹ãã ã®ã¹ããŒãããŸã£ããèšç»ããå¿ èŠã¯ãããŸããã ããã¥ã¡ã³ãã¯ãã®ååšãæå³ãããã®ã§ã¯ãªããããã¥ã¡ã³ããã³ã¬ã¯ã·ã§ã³ã«è¿œå ãããšããã«ãDocumentDBã¯èªåçã«ã€ã³ããã¯ã¹ãä»ããŸãïŒ=>ã¯ãšãªãå®è¡ã§ããŸãïŒã DocumentDBã®äž»ãªæ©èœã®1ã€ã¯ãã¹ããŒããšã»ã«ã³ããªã€ã³ããã¯ã¹ãèæ ®ããããšãªãããã¥ã¡ã³ãã«èªåçã«ã€ã³ããã¯ã¹ãä»ããããšã§ãã åæã«ãå®å®ããå®å®ããæ°ã®éåžžã«é«éãªæžã蟌ã¿æäœããé£ç¶ããèŠæ±äžã«ä¿èšŒãããŸãã
èªåã€ã³ããã¯ã¹äœæã¯ãã€ã³ããã¯ã¹äœæããªã·ãŒãéžæããããã©ãŒãã³ã¹ãšã¹ãã¬ãŒãžãå¢ããããšã§ãããã«ä¿®æ£ã§ããŸãã èªåã€ã³ããã¯ã¹äœæãå®å šã«ãªãã«ããããã€ã³ããã¯ã¹ä»ããããããã¥ã¡ã³ãã®ã¿ãéžæããŠïŒã€ã³ããã¯ã¹ãäœæããªãããã¥ã¡ã³ããéžæïŒãåæïŒäžè²«æ§ïŒã¢ãŒããšéåæïŒé 延ïŒã¢ãŒããéžæã§ããŸãïŒããã©ã«ãã§ã¯ãåæ¿å ¥æäœã§ã€ã³ããã¯ã¹ãåæçã«æŽæ°ãããŸãã眮æãŸãã¯åé€ããã®åäœã¯ãé 延ãã¢ãŒãçšã«ä¿®æ£ã§ããããšãã°ãå€æ°ã®èªã¿åãæäœã䌎ãã³ã¬ã¯ã·ã§ã³ãªã©ã§ããã©ãŒãã³ã¹äžã®å©ç¹ãåŸãããšãã§ããŸãïŒã
ãã«ãããã¥ã¡ã³ããã©ã³ã¶ã¯ã·ã§ã³
RDBMSã¯éåžžãã¹ãã¢ãããã·ãŒãžã£ãšããªã¬ãŒã䜿çšããŠããžãã¹ããžãã¯ãèšè¿°ãããã©ã³ã¶ã¯ã·ã§ã³ãšããŠå®è¡ããŸããããã«ãããéçºè ã¯ãã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ãéçºèšèªïŒJSãPythonãªã©ïŒãšT-SQLã®2ã€ã®ç°ãªãéçºèšèªãç¥ãå¿ èŠããããŸãã ãã ããDocumentDBã§ã¯ãJSããã°ã©ã å®è¡ã¢ãã«ãã¹ãã¢ãããã·ãŒãžã£ãšããªã¬ãŒã®åœ¢åŒã§ã³ã¬ã¯ã·ã§ã³ã«äœ¿çšã§ãããããå¹æçãªåæå®è¡å¶åŸ¡ãã€ã³ããã¯ã¹äœæãå®è¡ã§ããè±å¯ãªã¢ããªã±ãŒã·ã§ã³ããŒã«ã«æ°ãåãããããšã¯ãããŸããã
DocumentDBã¯ãã¹ãããã·ã§ããåé¢ãåããAmbient ACIDãã©ã³ã¶ã¯ã·ã§ã³ã§ãã®ããžãã¯ãç¬ç«ããŠã©ããããJSããã»ã¹ã§äŸå€ãã¹ããŒãããšããã©ã³ã¶ã¯ã·ã§ã³å šäœãããŒã«ããã¯ãããŸãã JSã®å®è¡ã¯ããããã¡ããŒã«ãšåãã¢ãã¬ã¹ã¹ããŒã¹ã§ãšã³ãžã³å ã§å®è¡ãããããã©ãŒãã³ã¹ã«è¯ã圱é¿ãäžããŸãã
function businessLogic(name, author) { var context = getContext(); var collectionManager = context.getCollection(); var collectionLink = collectionManager.getSelfLink() // . collectionManager.createDocument(collectionLink, {id: name, author: author}, function(err, documentCreated) { if(err) throw new Error(err.message); // var filterQuery = "SELECT * from root r WHERE r.author = 'George R.'"; collectionManager.queryDocuments(collectionLink, filterQuery, function(err, matchingDocuments) { if(err) throw new Error(err.message); context.getResponse().setBody(matchingDocuments.length); // for (var i = 0; i < matchingDocuments.length; i++) { matchingDocuments[i].author = "George RR Martin"; // we don't need to execute a callback because they are in parallel collectionManager.replaceDocument(matchingDocuments[i]._self, matchingDocuments[i]); } }) }) };
ãããã¯ãã¹ãŠãHTTP POSTã«ãããã©ã³ã¶ã¯ã·ã§ã³å®è¡ã§æ£åžžã«ã©ãããããŸãã
client.createStoredProcedureAsync(collection._self, {id: "CRUDProc", body: businessLogic}) .then(function(createdStoredProcedure) { return client.executeStoredProcedureAsync(createdStoredProcedure.resource._self, "NoSQL Distilled", "Martin Fowler"); }) .then(function(result) { console.log(result); }, function(error) { console.log(error); });
ç§ãã¡ã®ããŒããŒã¯ãJSONãšJSãããã«ç解ã§ãããããåã®åé¡ã¯çºçããŸããã 詳现-Azure DocumentDB REST API ã
ã¹ãã¢ãããã·ãŒãžã£ãããªã¬ãŒãããã³UDF
æ¢ã«è¿°ã¹ãããã«ãããžãã¹ããžãã¯ã¯ãã¹ãã¢ãããã·ãŒãžã£ãããªã¬ãŒããŸãã¯UDFãšããŠå®å šã«JSã§èšè¿°ã§ããŸãã JSã®ã¢ããªã±ãŒã·ã§ã³ã¯ãããªã¬ãŒãã¹ãã¢ãããã·ãŒãžã£ãšUDFã®å®è¡çšã«ç»é²ã§ããããªã¬ãŒãšã¹ãã¢ãããã·ãŒãžã£ã¯CRUDã§ããŸãããUDFã«ã¯æžã蟌ã¿ã¢ã¯ã»ã¹æš©ããããŸããããŸããã¢ã¯ã»ã¹èš±å¯ã¯ãããšãã°ãåã®æäœã åããã·ãŒãžã£ãããªã¬ãŒãUDFã¯åæã«äžå®éã®ãªãœãŒã¹ã䜿çšããŸãããå€éšJSã©ã€ãã©ãªã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã å²ãåœãŠããããªãœãŒã¹ãè¶ ãããšãæäœããããã¯ãããŸãã
ããã·ãŒãžã£ãããªã¬ãŒãUDFãç»é²ããŠREST APIã䜿çšããŠå®è¡ã§ããŸããç»é²åŸãã¹ãã¢ãããã·ãŒãžã£ãããªã¬ãŒããŸãã¯UDFã¯ããªã³ã³ãã€ã«ãããå®è¡ããããã€ãã³ãŒããšããŠä¿åãããŸãã
ã¹ãã¢ãããã·ãŒãžã£ãç»é²ãã
ã¹ãã¢ãããã·ãŒãžã£ã®ç»é²=æ°ããããã·ãŒãžã£çšã®ãªãœãŒã¹ãäœæãããã®ã³ã¬ã¯ã·ã§ã³ãHTTP POSTã§å²ãåœãŠãŸãã
var storedProc = { id: "validateAndCreate", body: function (documentToCreate) { documentToCreate.id = documentToCreate.id.toUpperCase(); var collectionManager = getContext().getCollection(); collectionManager.createDocument(collectionManager.getSelfLink(), documentToCreate, function(err, documentCreated) { if(err) throw new Error('Error while creating document: ' + err.message; getContext().getResponse().setBody('success - created ' + documentCreated.name); }); } }; client.createStoredProcedureAsync(collection._self, storedProc) .then(function (createdStoredProcedure) { console.log("Successfully created stored procedure"); }, function(error) { console.log("Error"); });
ã¹ãã¢ãããã·ãŒãžã£ã®å®è¡
ã¹ãã¢ãããã·ãŒãžã£ã®å®è¡ã¯ãHTTP POSTã䜿çšããŠãèŠæ±æ¬æã«å¿ èŠãªãã©ã¡ãŒã¿ãŒã転éããŠå床å®è¡ãããŸãã
var inputDocument = {id : "document1", author: "GG Marquez"}; client.executeStoredProcedureAsync(createdStoredProcedure.resource._self, inputDocument) .then(function(executionResult) { assert.equal(executionResult, "success - created DOCUMENT1"); }, function(error) { console.log("Error"); });
ããªã¬ãŒç»é²
ããªã¬ãŒã®ç»é²= HTTP POSTã䜿çšããŠã³ã¬ã¯ã·ã§ã³ã®æ°ãããªãœãŒã¹ãäœæããŸããããã»ã¹ã§ã¯ãããªã¬ãŒãåŒã³åºãåã«å®è¡ãããåŸã«å®è¡ããããããã³å®è¡ããæäœã®ã¿ã€ãïŒCRUDïŒãæå®ã§ããŸãã
var preTrigger = { id: "upperCaseId", body: function() { var item = getContext().getRequest().getBody(); item.id = item.id.toUpperCase(); getContext().getRequest().setBody(item); }, triggerType: TriggerType.Pre, triggerOperation: TriggerOperation.All } client.createTriggerAsync(collection._self, preTrigger) .then(function (createdPreTrigger) { console.log("Successfully created trigger"); }, function(error) { console.log("Error"); });
ããªã¬ãŒãªãœãŒã¹ã§HTTP DELETEãå®è¡ãããšãããªã¬ãŒãç»é²è§£é€ã§ããŸãã
client.deleteTriggerAsync(createdPreTrigger._self); .then(function(response) { return; }, function(error) { console.log("Error"); });
æ·»ä»ãã¡ã€ã«
DocumentDBã§ã¯ãç¹å¥ãªãšã³ãã£ãã£-æ·»ä»ãã¡ã€ã«ã®ããã«èŠãããã€ããªãã¡ã€ã«ïŒblobïŒãä¿åã§ããŸãã æ·»ä»ãã¡ã€ã«ã¯ãå®éã®ãã¡ã€ã«ãåç §ããç¹å¥ãªããã¥ã¡ã³ãïŒJSONïŒã§ãã äŸïŒ
æ¬ã®å 容ã¯ãDocumentDBãŸãã¯ãã®ä»ã®ã¹ãã¬ãŒãžã«ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯ãåãŠãŒã¶ãŒã®ã¡ã¿ããŒã¿ãåå¥ã®ããã¥ã¡ã³ããšããŠä¿åã§ããŸããããšãã°ãbook1ã®Alexã¯/ cols / alex / docs / book1ã§å©çšã§ããŸãã
æ·»ä»ãã¡ã€ã«ã¯ãæ¬ã®ããŒãžãæããŸããã€ãŸã/ colls / alex / docs / book1 / chapter1ãchapter2ãªã©ã
ãŸãšã
ãã®å ¥éèšäºã§ã¯ãDocumentDBã®éåžžã«åºæ¬çãªååãšæŠå¿µã«æ³šç®ããŸããã ãã®ãµãŒãã¹ã¯æ°ããã®ã§ãç§ãã¡èªèº«ãç©æ¥µçã«ç 究ããŠãããããã«çŸãã䜿çšäŸãæ瀺ã§ããããšãé¡ã£ãŠããŸãã é£çµ¡ãåãåã:)
䟿å©ãªãªã³ã¯
- Azureã30æ¥éç¡æã§ãè©Šããã ãã ïŒ
- Microsoft Cloudããã³ãã®ä»ã®ä»®æ³ã¢ã«ãããŒã³ãŒã¹ãåŠã¶
- ç¡æãŸãã¯è©Šçšçã®Visual StudioãããŠã³ããŒããã
- Microsoft Azure Development CenterïŒazurehub.ruïŒ -ã¹ã¯ãªãããã¬ã€ããäŸãéçºã®æšå¥šäºé
- Twitter.com/windowsazure_ru-ææ°ã®Microsoft Azureãã¥ãŒã¹
- Facebookã®Microsoft Azureã³ãã¥ãã㣠-å°é家ã質å
- ãŠãããŒãµã«Windows éçºè ã«ãªã