azure db 设置时区
Microsoft的云规模分布式数据库Azure Cosmos DB旨在提供应用程序所需的API和存储模型。 需要NoSQL数据库吗? 使用MongoDB或Cassandra API。 需要使用图查询吗? 使用Gremlin API。 Azure自己的表存储API? 他们也在那里。 甚至可以选择使用SQL 。
但这仅仅是Cosmos DB的外部,它与应用程序其余部分的连接。 在许多情况下,您需要添加更多代码来管理数据并提供数据库内部的基本处理。 传统数据库提供存储过程和触发器来管理此过程,并在数据附近运行服务器端代码。
在Cosmos DB中进入服务器端
不足为奇的是Cosmos DB支持服务器端代码,并具有一组内置JavaScript API ,这些API在数据库中运行事务代码,就像SQL Server存储过程一样。 但是,构建和运行这些存储过程的方法大不相同,需要进行一些考虑。 您不再需要使用一台服务器(或最多只有一个小型本地集群)上的一个数据库。 现在,您正在使用可能分布在各个洲之间的分布式商店,并使用新的一致性模型。 这些模型比最终的一致性更具可预测性,但没有提供强一致性模型所需的锁定。
Cosmos DB存储过程的核心是其集成JavaScript查询API。 过程可以访问标准数据库操作,以创建新项目以及读取,更新,删除和查询现有项目。 它们在Cosmos DB容器内工作,并已注册到数据库中的特定集合。
使用JavaScript查询API
构建Cosmos DB JavaScript很容易。 这就像在任何服务器端JavaScript环境中工作一样,因此您可以将现有技能带到Cosmos DB开发中。 您的代码将需要使用getContext()
函数创建一个上下文对象,因为这使您可以访问数据库以及任何可用的操作,包括请求和响应。 代码上Cosmos DB特定的约束将要求您集中精力编写服务器端代码。 存储过程和触发器代码在Cosmos DB存储容器的主副本中运行; 用户定义的函数查询在主副本和辅助副本上运行。
JavaScript Query API可以与Cosmos DBSQL API一起使用,也可以与自己的一组函数调用一起使用 。 JavaScript API使用函数来托管查询,处理存储的JSON文档和Cosmos DB的索引。 您可以像熟悉SQL命令一样对待filter()
和map()
类的函数,而filter()
像WHERE
一样运行,而map()
像SELECT
。 如果您将Microsoft的Linq内联查询语言与C#结合使用,则会发现查询API的工作方式类似。 如果您更喜欢SQL,则可以像其他任何SQL查询一样编写查询:在JavaScript中定义为字符串,并作为对容器中文档的查询调用的一部分传递给Cosmos DB。
重要的是要记住,Cosmos DB是一个分布式数据库,它将管理多个实例和多个容器中的数据,因此您将发现所有数据操作都是异步的,并且利用了服务器响应JavaScript回调。 您的回调应包含错误处理代码,否则错误将触发Cosmos DB自身的错误处理功能。 还有一个重要的考虑因素:Cosmos DB强制执行超时,如果过程花费的时间太长,它将被视为失败,并且数据库将回滚事务。
Cosmos DB中的存储过程
存储过程是作为JavaScript函数构建的 ,并且要插入数据库中的项将作为包含JSON内容的字符串传递给该函数。 您将需要解析JSON以获取其他数据类型,例如数组内容。 JavaScript可以轻松处理JSON,并且请求字符串内容映射为JavaScript类型。
一旦存储过程被编写并安装到数据库中,就可以像其他任何Cosmos DB函数一样从应用程序中调用它们。 您将首先注册该过程,然后通过构造适当的URI并将其传递给JSON来调用它。 请求主体将需要一个分区键,因为存储过程的作用域是特定的分区键。 将数据写入数据库后,将使用您选择的一致性模型进行复制。
触发器和用户定义的功能
Cosmos DB支持触发器 ,包括预触发和后触发。 在修改项目之前,您的应用程序将使用预触发; 后触发将随后运行。 预触发的一种用途是在将项目写入Cosmos DB之前对其进行验证:检查输入是否在范围之内,或者在初始操作中不存在预期信息的情况下添加预期信息。 您不会将参数传递给触发器,因为您所做的只是处理请求对象的内容。 类似地,后触发也可以从已修改的对象中获取数据,并使用它来更新Cosmos DB存储中的元数据或其他文档。
使用JavaScript查询API和getContext()
函数以类似于存储过程的方式编写触发器。 像使用JavaScript API的所有操作一样,Cosmos DB触发器是事务性的。 后触发中的错误将回滚当前事务,从而生成Cosmos DB异常。 预触发失败将意味着当前操作不会对数据库进行任何更改。
服务器端代码的另一种选择是用户定义的函数 ,这是一种使用可重用代码段的方法,该代码段可以添加到您的Cosmos DB数据库中,然后由触发器或存储过程调用。 一种典型的用途是用于通用计算,其中根据功能结果存储其他数据,例如使用里程津贴和费用规则,或计算要添加到购买中的营业税。
Cosmos DB是一个功能强大的工具,向其添加代码使它变得更加有用。 如果将它与Web或移动应用程序一起使用,则将计算卸载到数据库是有意义的,尤其是当您将计算的数据添加到文档或存储请求的元数据时。 代码不需要很复杂,但是如果您没有使用内联查询语言(例如.Net的Linq),那么与Cosmos DB的上下文模型配合使用可能会花费一些工作。
翻译自: https://www.infoworld.com/article/3391386/writing-server-side-code-in-azure-cosmos-db.html
azure db 设置时区