当前位置: 首页 > 科技观察

MongoDBAtlas_0

时间:2023-03-16 17:22:13 科技观察

【.com快译】多年来,各大平台已经意识到基于SDK连接器的单一本地数据库难以构建完整的应用平台。因此,我们往往需要面向未来的数据库即服务(Database-as-a-Service,DaaS),作为一种云原生的解决方案,通过API连接到各种客户端。同时,我们针对非SQL数据库结构,创建并普及了NoSQL相关概念。如今,市场上有许多基于NoSQL的数据库,包括:键值数据库、文档数据库、列式数据库和图数据库。虽然有CouchBase这个强大的竞争对手,但MongoDB仍然是目前文档数据库领域的老大。事实上,作为一个通用的、基于文档的分布式数据库,MongoDB是专门为云应用开发和构建的。就像JDBC连接器可以辅助Java程序连接到关系数据库的RDBMS一样,目前有很多语言和框架已经为MongoDB构建了开箱即用的连接器。例如,在MEAN(MongoDB、Express、AngularJS、Node.js)或MERN(MongoDB、Express、ReactJS、Node.js)堆栈中的关键组件Mongoose可以用作NodeJS中的模块,可以通过npm获取。在本文中,我们将重点介绍服务于分布式应用和云数据库的MongoDBAtlas平台,并以实例的形式了解它如何帮助开发者构建云原生、快速的应用服务栈。MongoDBAtlas主要功能1、纯云数据库,用户在线注册后即可获得其大量服务。2.由于Atlas支持纯基于API的通信方式,消费者可以通过多种认证授权机制(如:basicauthentication,oAuth2等),通过标准的REST接口调用数据库。3、其GraphQL功能可通过API查询。也就是说,用户可以通过从底层数据库模式自动生成模式来轻松地为其端点设置API。4.NodeJS应用程序和Gatsby的JAMStack等平台框架可以通过Atlas连接器连接到MongoDB。5.可以通过提供各种管理相关的服务来治理目标数据库。6、可以通过主从服务器的方式为集群提供多(跨)区域的可用性。7、在保留文档数据库核心能力的同时,在云服务之上增加了一个核心应用服务层——Realm,集成了多个消费端(如:Web应用、胖程序等云原生应用,ETC。)。他们都可以通过这一层连接到MongoDB并交换数据。8.它通过称为“触发器”的概念提供基于事件的集成。也就是说,“触发器”可以通过触发事件传递给其他发布者和注册消费者。9.提供无服务器编程模型,可以使用Python、JavaScript等编码语言将代码片段嵌入“函数式函数”,使其成为函数即服务(Function-As-A-Service,FaaS)来支持低代码模式。10.MongoDB可以通过电子邮件或短信连接与多个第三方(例如,Twilio的本地连接器)通信。11.提供基于角色的安全数据库访问和管理。12.可以创建用于分析和报告目的的图表。开发实例在新冠疫情的时刻,我们使用MongoDBAtlas进行开发,使用Gatsby作为JAMStack平台,搭建了一个响应式简单的Web应用。它可用于搜索和显示重要信息,例如:病床、氧气瓶、政府联系电话和志愿者。所有数据将以协作方式保存在Google表格中。作为Gatsby新手,为了避免开发中繁琐的页面和集成,我使用了GoogleAppScript和MongoDBAtlas来轻松选择和构建客户端和数据库应用程序。由于Atlas带有易于配置的集群、集合和拼接服务,因此GraphQL在MongoDB上设置和构建整个应用程序比为自定义应用程序构建样板代码更有效。快多了。当然,您也可以使用Lambda、DynamoDB、Cognito和GraphQLAPI等服务在AWS平台上构建类似的应用程序。整个应用实例的逻辑如下图所示。下面是一些关键的代码片段。GoogleSheet各种应用脚本在GoogleSheet或客户端的“工具”菜单中,点击“脚本编辑器”编写Google应用脚本。如果您在GoogleSheet中添加或修改了以下JavaScript代码,请直接点击“运行”按钮。*****通过Stitch将事件从工作表导出到MongoDB数据库****/functionexportEventsToMongoDB(){varspreadsheet=SpreadsheetApp.getActiveSpreadsheet();varsheet=spreadsheet.getSheetByName("Data");varheaderRows=1;//Numberofrowsofheaderinfo(toskip)varrange=sheet.getDataRange();//determinetherangeofpopulateddatavarnumRows=range.getNumRows();//getthenumberofrowsintherangevardata=range.getValues();//gettheactualdatainarraydata[row][column]Logger.log(JSON.stringify(data));for(vari=headerRows;i>-mejsg/service/GetCOVID19Data/incoming_webhook/webhook0',options);}MongoDBAtlas的开发步骤在MongoDB中,请依次执行以下步骤:1.创建集群->集合这里的集合已经保存了一个数据模式。2.设置访问数据库的角色。3.在Atlas的Realm空间,写一个第三方服务,作为Webhook角色,将数据输入到这个集合中,然后创建各种需要的日志记录和授权访问。为了从GoogleAppScript调用API,我们还需要创建一个POSTAPI来插入相关信息。4.创建可用于从Atlas集合中查询数据的GraphQLAPI。由于GraphQL是在Atlas的Realm下创建的,它将提供一个用于选择数据库和集合的接口,并生成要部署的模式以供客户端使用。5.您可以使用聚合数据创建搜索索引,例如Solr或ElasticSearch索引,以加快导航速度。以下是webhook的相关JavaScript代码段:exports=asyncfunction(payload){constmongodb=context.services.get("mongodb-atlas");consteventsdb=mongodb.db("data");consteventscoll=eventsdb.collection("data");constresult=awaiteventscoll.insertOne(payload.query);varid=result.insertedId.toString();if(result){returnJSON.stringify(id,false,false);}返回{文本:`错误保存`};}以下代码段是支持的JSON文档:_id:609d81b3c37d0e43541a0b20location:"Kolkata"hospital:""type:"Oxygen"commentes:"Oxygensupportforpatients"date:"2021-05-07"number:"91-1111111111"available_bed:""links:""您可以通过创建Twilio帐户并使用Twilio服务来发送简单的文本消息(SMS)。同时,你也可以使用下面的JavaScript代码片段的函数(function)来执行任务。exports=function(changeEvent){consttwilio=context.services.get("SendSMS");returntwilio.send({to:"919999999999",from:"19990009999",body:"HellofromRealm!"});};盖茨比设置upGatsby为初学者提供了一个非常简单方便的设置过程。我们可以提前通过npm下载并设置相应的代码包,然后通过修改gatsby-config.js文件添加MongoDB与GraphQL查询的连接模块。另外,我们可以修改index.js页面,编写ReactJS代码,使用GraphQL查询和响应呈现相关数据。当然,在查找Gatsby如何缓存GraphQL响应时,以及每次在MongoDB的Gatsby服务器中更改数据时,我也遇到过GraphQL查询数据库的错误。希望大家在开发过程中能够避免。gatsby-config.js中的变化请使用“npminstall--savegatsby-source-mongodb”命令安装代码包,并为MongoDB添加以下JSON片段作为插件:{//Thenameofthepluginresolve:`gatsby-source-mongodb`,options:{//NameofthedatabaseandcollectionwherearerecordsresidedbName:'data',collection:'data',server:{address:'cluster0-test-.mongodb.net',port:27017},auth:{user:'test',password:'test123'},extraParams:{replicaSet:'Main-shard-0',ssl:true,authSource:'admin',retryWrites:true},refetchInterval:60,}}下面的JavaScript代码段将反映对index.js:importReactfrom"react"import{Link}from"gatsby"import{graphql}from"gatsby"importLayoutfrom"../components/layout"constIndexPage=(props)=>{constcovid19DataSet=props.data.allMongodbCovid19Covid19。边缘;return(<布局>

{covid19DataSet.map(covid19Data=>)}
类型位置医院AvailableBedLinks联系电话更新日期评论
{covid19Data.node.type}{covid19Data.node.location}{covid19Data.node.hospital}{covid19Data.node.available_bed}{covid19Data.node.links}{covid19Data.node.number}{covid19Data.node.date}{covid19Data.node.commentes}
)}exportdefaultIndexPageexportconstpageQuery=graphql`queryMQuery{allMongodbCovid19Covid19{edges{node{hospitaldatecommentesavailable_bedlinkslocationnumbertype}}}}Chart我们可以根据不同的分析目的生成各种图表可用数量类型服务。当然,其他支持的图表类型包括:圆、条、线、组合、面积、网格等。此外,MongoDBAtlas还可以用于许多其他类型的应用程序,例如将服务构建为云原生平台的一部分。原标题:Cloud-NativeandMongoDB,作者:BikramSinha