MarkLogic中不同事务中三元组的删除

MarkLogic中不同事务中三元组的删除,marklogic,marklogic-8,Marklogic,Marklogic 8,我正在使用MarkLogic 8 我必须在第一条语句中使用sem:sparql update删除三元组,不希望在下一条语句中使用sem:sparql获得相同的已删除三元组 我尝试在xdmp:invoke function中传递sem:sparql update,但它不起作用 在sem:sparql update中,据说默认隔离将是“不同的事务”,如果是这种情况,我相信我不应该在sem:sparql update的即时语句中得到已删除的三元组 请帮忙 您需要在不同事务中运行sem:sparql u

我正在使用
MarkLogic 8

我必须在第一条语句中使用
sem:sparql update
删除三元组,不希望在下一条语句中使用
sem:sparql
获得相同的已删除三元组

我尝试在
xdmp:invoke function
中传递
sem:sparql update
,但它不起作用

sem:sparql update
中,据说默认隔离将是“不同的事务”,如果是这种情况,我相信我不应该在
sem:sparql update
的即时语句中得到已删除的三元组


请帮忙

您需要在
不同事务中运行
sem:sparql update
sem:sparql
。sem:sparql将以调用更新的请求的时间戳运行,该时间戳在更新本身之前,因此它将永远无法看到更新

它是MarkLogic用于事务处理的MVCC方法的一部分


您需要在
不同事务中运行
sem:sparql update
sem:sparql
。sem:sparql将以调用更新的请求的时间戳运行,该时间戳在更新本身之前,因此它将永远无法看到更新

它是MarkLogic用于事务处理的MVCC方法的一部分


我强烈建议您阅读《应用程序开发人员指南》的一章

MarkLogic中的语句是请求或更新。请求发生在特定的时间戳上,并且是只读的,这意味着它们看到的是稳定的。因此,请求不必担心写锁。更新会对数据库进行更改。对于XQuery,MarkLogic通过静态分析(对于JavaScript,您必须调用)。如果你不确定自己正在跑步,你可以打电话;请求将为您提供一个值,但更新将为您提供空序列

您希望执行更新,并使这些更改对以后的SPARQL查询可见。根据父请求是查询还是更新,有两种可能的方法

无论是哪种情况,您的
sem:sparql update
调用都需要在不同的事务中,这是正确的

父项是一个更新

如果父请求是更新,则在单独事务sparql更新之后发出的请求将可见。除了确保在sparql更新之后读取之外,您不需要做任何特殊的事情

父项是一个查询

如果父请求是查询,那么它将以设置的时间戳运行,并且不会看到sparql更新的结果。在本例中,您还希望将
sem:sparql
作为单独的事务运行,这将允许它查看已经完成的更新事务的结果


请注意,如果父项是一个查询,那么从技术上讲,将其作为一个更新是可行的,但这不太可能是一个好的计划。在这种情况下,整个父请求将需要担心更多的锁

我强烈建议您阅读《应用程序开发人员指南》的一章

MarkLogic中的语句是请求或更新。请求发生在特定的时间戳上,并且是只读的,这意味着它们看到的是稳定的。因此,请求不必担心写锁。更新会对数据库进行更改。对于XQuery,MarkLogic通过静态分析(对于JavaScript,您必须调用)。如果你不确定自己正在跑步,你可以打电话;请求将为您提供一个值,但更新将为您提供空序列

您希望执行更新,并使这些更改对以后的SPARQL查询可见。根据父请求是查询还是更新,有两种可能的方法

无论是哪种情况,您的
sem:sparql update
调用都需要在不同的事务中,这是正确的

父项是一个更新

如果父请求是更新,则在单独事务sparql更新之后发出的请求将可见。除了确保在sparql更新之后读取之外,您不需要做任何特殊的事情

父项是一个查询

如果父请求是查询,那么它将以设置的时间戳运行,并且不会看到sparql更新的结果。在本例中,您还希望将
sem:sparql
作为单独的事务运行,这将允许它查看已经完成的更新事务的结果


请注意,如果父项是一个查询,那么从技术上讲,将其作为一个更新是可行的,但这不太可能是一个好的计划。在这种情况下,整个父请求将需要担心更多的锁

我确实想知道:为什么在一个请求中同时执行更新和sparql?你不能在两个请求中完成它吗?我确实在想:为什么你要在一个请求中同时执行更新和sparql?你不能分两次请求吗?谢谢。这很有帮助,谢谢。这很有帮助。