gpt4 book ai didi

azure-cosmosdb - Cosmos DB 存储过程、UDF 和可重用代码 - 它们如何组合在一起?

转载 作者:行者123 更新时间:2023-12-05 05:15:48 24 4
gpt4 key购买 nike

我有很多问题:)

我已经开始使用 Cosmos DB (SQL API)。喜欢它!

但我正在努力寻找构建和管理代码的最佳方式。我正在使用 Visual Studio。

这是一些代码,我将根据这 4 个 javascript 函数提出问题:

function createYayBase(something) {
// UDF
return {
pk: "Yay",
id: "Ptr=" + something
};
}
function createYayDoc(whatever, something) {
// UDF
var o = createYayBase(something);
o.Message = whatever;
return o;
}
function validateYayDoc(doc) {
// UDF
if (doc.pk !== "Yay") { throw new Error("non-Yay! :("); }
}
function processYay(val) {
// stored procedure
var doc = CreateYayDoc(val, "Rec");
validateYayDoc(doc);
...createDocument(selflink, doc, ...);
}

在我的解决方案中,这 4 个函数位于 4 个不同的 .js 文件中。我会在我的集合中将前 3 个部署为它们自己的用户定义函数。最后,我将部署为存储过程。

我的应用程序将执行“processYay”存储过程来执行一些操作。 UDF 是支持性的。

问题:

  1. 我能否直接从存储过程调用 UDF,就像我在上面的“processYay”中所做的那样?或者它们只能作为查询的一部分访问?
  2. 我可以像在“createYayDoc”中所做的那样从另一个 UDF 调用一个 UDF 吗?
  3. 在这种情况下,UDF 可以“抛出”还是被视为副作用?

如果答案是“不”、“不”和“不”,似乎还有另一种解决方案:在存储过程本身内部定义函数。它会像这样完美地工作:

function processYay(val) {
// stored procedure
function createYayBase(something) { ... }
function createYayDoc(whatever, something) { ... }
function validateYayDoc(val) { ... }

var doc = CreateYayDoc(val, "Rec");
validateYayDoc(doc);
...createDocument(selflink, doc, ...);
}

但是……

如何重用代码?

我的 javascript 位于 .NET 类库中。我喜欢“#include”技巧 :)。我会用 webpack 等破解一些东西吗?

或者...是否有一些人们使用的可接受的方法?

最佳答案

1.Can I call a UDF from a stored procedure directly, similar to how I've done it above in "processYay"? Or are they only accessible aspart of a query?

2.Can I call a UDF from another UDF, as I did inside "createYayDoc"?

3.Can a UDF 'throw' or is that considered a side effect in this case?

答案是否定的。你可以在官方UDF doc中找到以下明确的声明.

User-defined functions (UDFs) are used to extend the Azure Cosmos DBSQL query language grammar and implement custom business logic. Theycan only be called from inside queries. They do not have access to thecontext object and are meant to be used as compute-only JavaScript.Therefore, UDFs can be run on secondary replicas of the Cosmos DBservice.

我觉得你对用户自定义函数的应用场景有一些误解。它只是帮助您根据自定义业务逻辑处理查询的结果集。不能被存储过程调用,不能调用其他方法,甚至不能操作数据库。

存储过程只是运行在服务器端的JS代码脚本,它可以帮助你做一些自定义的数据库操作,甚至是批量操作。它是关于特殊需求的,所以你不能认为它是一个完整项目中的一个普通功能。

考虑到复用性,可以将JS代码中的一些关键变量作为参数传递给存储过程。

希望对你有帮助。

关于azure-cosmosdb - Cosmos DB 存储过程、UDF 和可重用代码 - 它们如何组合在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51237715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com