自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為云而生的MongoDB Atlas

譯文
運維 數(shù)據(jù)庫運維 MongoDB
本文將重點討論服務(wù)于分布式應(yīng)用和云端數(shù)據(jù)庫的MongoDB Atlas平臺,并以實例的形式,了解它是如何協(xié)助開發(fā)者構(gòu)建出云原生的且快捷的應(yīng)用服務(wù)棧。

[[409119]]

【51CTO.com快譯】多年來,各大平臺相繼意識到,光靠基于SDK連接器的本地單一數(shù)據(jù)庫,是難以構(gòu)建出整套應(yīng)用平臺的。因此,我們往往需要面向未來的數(shù)據(jù)庫即服務(wù)(Database-as-a-Service,DaaS),作為云原生的解決方案,通過API連接到各類用戶端。與此同時,針對非SQL的數(shù)據(jù)庫結(jié)構(gòu),我們創(chuàng)建并普及了NoSQL的相關(guān)概念。如今,市場上已有著許多基于NoSQL的數(shù)據(jù)庫,其中包括:鍵值類、文檔類、柱狀、以及圖形數(shù)據(jù)庫等。雖然有CouchBase作為強有力的競爭對手,但是MongoDB仍然是目前文檔類數(shù)據(jù)庫領(lǐng)域的佼佼者。實際上,作為一個通用的、基于文檔的分布式數(shù)據(jù)庫,MongoDB就是專為云端應(yīng)用而開發(fā)構(gòu)建的。

就像JDBC連接器可以協(xié)助將Java程序連接到關(guān)系型數(shù)據(jù)庫的RDBMS上一樣,目前已有多種語言和框架,為MongoDB構(gòu)建了開箱即用的連接器。例如,MEAN(MongoDB、Express、AngularJS、Node.js)或MERN(MongoDB、Express、ReactJS、Node.js)棧中的一個關(guān)鍵組件—Mongoose,便可以作為NodeJS中的一個模塊,并能通過npm來獲取。

在本文中,我們將重點討論服務(wù)于分布式應(yīng)用和云端數(shù)據(jù)庫的MongoDB Atlas平臺,并以實例的形式,了解它是如何協(xié)助開發(fā)者構(gòu)建出云原生的且快捷的應(yīng)用服務(wù)棧。

MongoDB Atlas的主要功能

1. 它是一個基于云端的純數(shù)據(jù)庫,用戶在線完成注冊后,可以獲得其大量服務(wù)。

2. 由于Atlas支持基于純API式的通信方式,因此消費者端可以通過多種身份驗證和授權(quán)機制(如:基本的身份驗證、oAuth2等),通過標準的REST接口,去調(diào)用數(shù)據(jù)庫。

3. 其GraphQL功能可以通過API進行查詢。也就是說,用戶可以通過從底層數(shù)據(jù)庫架構(gòu)自動生成架構(gòu),去輕松地為其端點設(shè)置API。

4. 諸如NodeJS應(yīng)用和Gatsby的JAMStack平臺框架,都能夠通過Atlas的連接器連接到MongoDB上。

5. 它可以通過提供多種與管理相關(guān)的服務(wù),來治理目標數(shù)據(jù)庫。

6. 它可以通過主、備服務(wù)器的方式,為集群提供多(跨)區(qū)域的可用性。

7、在保留了文檔數(shù)據(jù)庫核心能力的同時,它在云服務(wù)之上增加了一個核心應(yīng)用服務(wù)層—Realm,并通過提供一個名為MongoDB Stitch的框架,來集成多個消費者端(如:Web應(yīng)用、fat programs、以及其他云原生應(yīng)用程序等)。它們都能夠通過該層面連接到MongoDB上,并進行數(shù)據(jù)交換。

8. 它通過被稱為“觸發(fā)器”的概念,提供基于事件的集成。也就是說,“觸發(fā)器”可以通過觸發(fā)事件,以傳遞給其他發(fā)布者和注冊相同的消費者端。

9. 它提供了一種無服務(wù)器的編程模型,可以使用Python、JavaScript等編碼語言,將代碼片段嵌入到“功能函數(shù)”中,并使其成為功能即服務(wù)(Function-As-A-Service,F(xiàn)aaS),以支持低代碼模式(low code pattern)。

10. MongoDB可以通過電子郵件或短信的連接方式,與多個第三方(如,Twilio的本地連接器)進行通信。

11. 它提供基于角色安全的數(shù)據(jù)庫訪問和管理。

12. 它能夠根據(jù)分析和報告目,去創(chuàng)建圖表。

開發(fā)示例

在新冠疫情的當下,我們使用MongoDB Atlas進行開發(fā),并使用Gatsby作為JAMStack平臺,構(gòu)建一個響應(yīng)式的簡單Web應(yīng)用程序。它可以被用來搜索和顯示諸如:醫(yī)院病床、氧氣瓶、政府聯(lián)系電話、以及志愿者等重要信息。所有的數(shù)據(jù)都會以協(xié)作的方式被保存在Google Sheet中。

作為一名Gatsby新手,為了避免開發(fā)中出現(xiàn)繁瑣的頁面和集成,我使用了Google App Script和MongoDB Atlas,來輕松地選擇和構(gòu)建客戶端和數(shù)據(jù)庫應(yīng)用。由于Atlas帶有易于配置的集群、集合、以及拼接服務(wù)(stitch service),因此GraphQL在MongoDB上設(shè)置和構(gòu)建整個應(yīng)用程序的效率,比為自定義應(yīng)用去構(gòu)建樣板代碼(boiler-plate code),要快得多。當然,您也可以使用諸如Lambda、DynamoDB、Cognito、GraphQL API之類的服務(wù),在AWS平臺上構(gòu)建類似的應(yīng)用。整個應(yīng)用示例的邏輯,如下圖所示。

 

下面是一些關(guān)鍵性的代碼片段。

Google Sheet的各種應(yīng)用腳本

在Google Sheet的“工具”菜單或客戶端上,請點擊“腳本編輯器”,以編寫 Google應(yīng)用腳本。如果您在Google Sheet中已經(jīng)完成了如下JavaScript代碼的添加或修改,那么請直接單擊“運行”按鈕。

  1. ***** Export the events from the sheet to a MongoDB Database via Stitch****/ 
  2.  function exportEventsToMongoDB()  
  3. {var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
  4.  var sheet = spreadsheet.getSheetByName("Data"); 
  5.  var headerRows = 1; // Number of rows of header info (to skip) 
  6.  var range = sheet.getDataRange(); // determine the range of populated data 
  7.  var numRows = range.getNumRows(); // get the number of rows in the range 
  8.  var data = range.getValues(); // get the actual data in an array data[row][column
  9.  Logger.log(JSON.stringify(data)); 
  10.  for (var i=headerRows; i<numRows; i++)  
  11.  {var date_updated = Utilities.formatDate(new Date(data[i][5]), "GMT""yyyy-MM-dd");  
  12.   // Make a POST request with form data. 
  13.   var formData = {'location': data[i][0], 
  14.                   'links': data[i][1], 
  15.                   'hospital': data[i][2], 
  16.                   'available_bed': data[i][3], 
  17.                   'number': data[i][4], 
  18.                   'date': date_updated, 
  19.                   'commentes': data[i][6], 
  20.                   'type': data[i][7]}; 
  21.   var options = {'method' : 'post','payload' : formData}; 
  22.   if (true) {// Call the API from MongoDB Atlas 
  23.     var insertID = UrlFetchApp.fetch('https://<<MongoDB Stitch API endpoint>>-mejsg/service/GetCOVID19Data/incoming_webhook/webhook0', options); 
  24.   } 
  25.   

MongoDB Atlas的開發(fā)步驟

在MongoDB中,請依次執(zhí)行以下步驟:

1. 創(chuàng)建集群 -> 集合。此處的集合中已保存有數(shù)據(jù)模式(data schema)。

2. 設(shè)置訪問數(shù)據(jù)庫的角色。

3. 在Atlas的Realm空間中,編寫一個將在此集合中輸入數(shù)據(jù)的第三方服務(wù),以作為Webhook角色,進而創(chuàng)建各種所需的日志記錄和授權(quán)訪問。為了實現(xiàn)從Google App Script處調(diào)用API,我們還需要創(chuàng)建一個POST API,來插入相關(guān)信息。

4. 從Atlas集合中創(chuàng)建一個可用于查詢數(shù)據(jù)的GraphQL API。由于GraphQL是在Atlas的Realm下被創(chuàng)建的,因此它將提供可選擇數(shù)據(jù)庫和集合的接口,以及生成待部署的模式,以供客戶端使用。

5. 您可以像Solr或ElasticSearch索引那樣,創(chuàng)建帶有集合數(shù)據(jù)的搜索索引,以實現(xiàn)更快的導(dǎo)航。

如下是webhook的相關(guān)JavaScript代碼段:

  1. exports = async function(payload) { 
  2.   const mongodb = context.services.get("mongodb-atlas"); 
  3.   const eventsdb = mongodb.db("data"); 
  4.   const eventscoll = eventsdb.collection("data"); 
  5.   const result= await eventscoll.insertOne(payload.query); 
  6.   var id = result.insertedId.toString(); 
  7.   if(result) { 
  8.     return JSON.stringify(id,false,false);   
  9.  
  10.   } 
  11.   return { text: `Error saving` }; 

如下代碼段則是配套的JSON文檔:

  1. _id:609d81b3c37d0e43541a0b20 
  2. location: "Kolkata" 
  3. hospital: "" 
  4. type: "Oxygen" 
  5. commentes : "Oxygen support for patients" 
  6. date"2021-05-07" 
  7. number : "91-1111111111" 
  8. available_bed: "" 
  9. links : "" 

您可以通過創(chuàng)建一個Twilio帳戶,并使用Twilio服務(wù)發(fā)送簡單的消息短信(SMS)。同時,您也可以使用如下JavaScript代碼段的功能函數(shù)(function),來執(zhí)行任務(wù)。

  1. exports = function(changeEvent) { 
  2.   const twilio = context.services.get("SendSMS"); 
  3.     return twilio.send({ 
  4.         to"919999999999"
  5.         from"19990009999"
  6.         body: "Hello from Realm!" 
  7.     }); 
  8. }; 

Gatsby的設(shè)置

Gatsby為初學者提供了一個非常簡單便捷的設(shè)置過程。我們可以事先通過npm的方式,下載并設(shè)置其對應(yīng)的代碼包,然后通過更改gatsby-config.js文件,以添加MongoDB與GraphQL查詢之間的連接模塊。此外,我們可以修改index.js頁面,編寫ReactJS代碼,并使用GraphQL查詢與響應(yīng),來呈現(xiàn)相關(guān)數(shù)據(jù)。當然,我在查找Gatsby是如何緩存GraphQL響應(yīng)時,以及每次在MongoDB的Gatsby服務(wù)器中更改數(shù)據(jù)時,也曾遇到過GraphQL查詢數(shù)據(jù)庫的錯誤。希望您在開發(fā)的過程中,能夠避免。

gatsby-config.js 中的變更

請使用“npm install --save gatsby-source-mongodb”命令來安裝代碼包,并為MongoDB添加以下JSON代碼段作為插件:

  1.  // The name of the plugin 
  2.  resolve: `gatsby-source-mongodb`, 
  3.  options: { 
  4.  // Name of the database and collection where are records reside 
  5.  dbName: 'data'
  6.  collection: 'data'
  7.  server: { 
  8.  address: 'cluster0-test-.mongodb.net'
  9.  port: 27017 
  10.  }, 
  11.  auth: { 
  12.  user'test'
  13.  password'test123' 
  14.  }, 
  15.  extraParams: { 
  16.  replicaSet: 'Main-shard-0'
  17.  ssl: true
  18.  authSource: 'admin'
  19.  retryWrites: true 
  20.  }, 
  21. refetchInterval: 60, 
  22.  } 
  23.  } 

如下JavaScipt代碼段將各項變更反應(yīng)到index.js上:

  1. import React from "react" 
  2. import { Link } from "gatsby" 
  3. import { graphql } from "gatsby" 
  4. import Layout from "../components/layout" 
  5. const IndexPage = (props) => { 
  6.  const covid19DataSet = props.data.allMongodbCovid19Covid19.edges; 
  7. return ( 
  8.  <Layout> 
  9.  <table
  10.  <tr> 
  11.  <td>Type</td> 
  12.  <td>Location</td> 
  13.  <td>Hospital</td> 
  14.  <td>Available Bed</td> 
  15.  <td>Links</td> 
  16.  <td>Contact Number</td> 
  17.  <td>Date of Update</td> 
  18.  <td>Comments</td> 
  19.  </tr> 
  20.  {covid19DataSet.map(covid19Data => 
  21.  <tr> 
  22.  <td>{covid19Data.node.type}</td> 
  23.  <td>{covid19Data.node.location}</td> 
  24.  <td>{covid19Data.node.hospital}</td> 
  25.  <td>{covid19Data.node.available_bed}</td> 
  26.  <td>{covid19Data.node.links}</td> 
  27.  <td>{covid19Data.node.number}</td> 
  28.  <td>{covid19Data.node.date}</td> 
  29.  <td>{covid19Data.node.commentes}</td> 
  30. </tr> 
  31.  )} 
  32.  </table
  33.  </Layout> 
  34. export default IndexPage 
  35. export const pageQuery = graphql` 
  36. query MQuery { 
  37.  allMongodbCovid19Covid19 { 
  38.  edges { 
  39.  node { 
  40.  hospital 
  41.  date 
  42.  commentes 
  43.  available_bed 
  44.  links 
  45.  location 
  46.  number 
  47.  type 
  48.  } 
  49.  } 
  50.  } 

圖表

我們可以根據(jù)不同的分析目的,產(chǎn)生各種圖表。下面的柱狀圖展示了在該應(yīng)用示例中,不同類型服務(wù)的可用數(shù)量。當然,其他可支持的圖表類型還有:圓形、條形、線狀、組合、區(qū)域、網(wǎng)格等。

除此以外,MongoDB Atlas還可以被用于許多其他類型的應(yīng)用,例如將服務(wù)構(gòu)建為云原生平臺的一部分。

原文標題:Cloud-Native and MongoDB,作者: Bikram Sinha

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

責任編輯:華軒 來源: 51CTO
相關(guān)推薦

2014-04-10 09:49:38

System z關(guān)鍵業(yè)務(wù)

2014-11-05 09:11:40

網(wǎng)易有道云協(xié)作企業(yè)及應(yīng)用

2016-09-23 11:02:11

光環(huán)有云混合云開源

2015-11-17 16:23:30

2013-10-28 09:30:53

RackSpaceZeroVMHypervisor

2010-05-07 09:59:00

虛擬化

2020-09-24 09:25:36

2016-09-01 20:07:06

華為HUAWEI CONN劉少云

2020-09-02 16:39:00

青云QingCloud存儲QingStor

2015-03-31 16:25:35

Cocos

2016-09-22 15:29:41

程序IT加班

2014-09-22 10:02:26

開源

2011-12-28 13:28:05

云計算服務(wù)器

2016-12-01 13:48:10

曙光

2009-12-04 10:14:03

Chrome OS上網(wǎng)本

2014-06-19 11:03:01

銳捷網(wǎng)絡(luò)云計算

2016-05-26 10:12:20

點贊
收藏

51CTO技術(shù)棧公眾號