在 MarkLogic 中删除不同事务中的三元组
Deletion of triples in different transaction in MarkLogic
我正在使用 MarkLogic 8
我必须在第一个语句中使用 sem:sparql-update
删除三元组并且不想在下一个语句中使用 sem:sparql
.
获得相同的删除三元组
我尝试在 xdmp:invoke-function
中传递 sem:sparql-update
但它不起作用。
在 sem:sparql-update
中据说默认隔离将是 'different-transaction',如果是这样的话我相信我不应该在 [=11= 的立即声明中得到删除的三元组].
请帮忙!
您需要 运行 sem:sparql-update
和 sem:sparql
different-transactions
。 sem:sparql 否则 运行 带有调用更新的请求的时间戳,它早于更新本身,因此它永远无法看到更新。
它是 MarkLogic 用于其事务处理的 MVCC 方法的一部分。
HTH!
我强烈建议阅读应用程序开发人员指南的 Understanding Transactions in MarkLogic Server 章节。
MarkLogic 中的语句是请求或更新。请求在特定时间戳发生并且是只读的,这意味着他们看到的是稳定的。正因为如此,请求不必担心写锁。更新对数据库进行更改。对于 XQuery,MarkLogic 通过静态分析知道您在做什么(对于 JavaScript,您必须调用 declareUpdate()
). If you're not sure which you're running, you can call xdmp:request-timestamp
;请求会给您一个值,但更新会给您空序列.
您想进行更新并使这些更改对以后的 SPARQL 查询可见。有两种可能的方式,具体取决于父请求是查询还是更新。
无论哪种情况,您都走在正确的轨道上,您的 sem:sparql-update
调用需要在不同的事务中进行。
父级是更新
如果父请求是更新,那么在 separate-transaction sparql-update 之后发出的请求将是可见的。除了确保在 sparql-update 之后读取数据外,您不需要做任何特别的事情。
父级是查询
如果父请求是查询,那么它会运行在设置的时间戳处运行,并且不会看到 sparql-update 的结果。在这种情况下,您还希望将 运行 和 sem:sparql
作为一个单独的事务,这将允许它看到已经完成的更新事务的结果。
请注意,如果父项是一个查询,从技术上讲,使其成为更新是可行的,但这不太可能是一个好的计划。在那种情况下,整个父请求需要担心更多的锁。
我正在使用 MarkLogic 8
我必须在第一个语句中使用 sem:sparql-update
删除三元组并且不想在下一个语句中使用 sem:sparql
.
我尝试在 xdmp:invoke-function
中传递 sem:sparql-update
但它不起作用。
在 sem:sparql-update
中据说默认隔离将是 'different-transaction',如果是这样的话我相信我不应该在 [=11= 的立即声明中得到删除的三元组].
请帮忙!
您需要 运行 sem:sparql-update
和 sem:sparql
different-transactions
。 sem:sparql 否则 运行 带有调用更新的请求的时间戳,它早于更新本身,因此它永远无法看到更新。
它是 MarkLogic 用于其事务处理的 MVCC 方法的一部分。
HTH!
我强烈建议阅读应用程序开发人员指南的 Understanding Transactions in MarkLogic Server 章节。
MarkLogic 中的语句是请求或更新。请求在特定时间戳发生并且是只读的,这意味着他们看到的是稳定的。正因为如此,请求不必担心写锁。更新对数据库进行更改。对于 XQuery,MarkLogic 通过静态分析知道您在做什么(对于 JavaScript,您必须调用 declareUpdate()
). If you're not sure which you're running, you can call xdmp:request-timestamp
;请求会给您一个值,但更新会给您空序列.
您想进行更新并使这些更改对以后的 SPARQL 查询可见。有两种可能的方式,具体取决于父请求是查询还是更新。
无论哪种情况,您都走在正确的轨道上,您的 sem:sparql-update
调用需要在不同的事务中进行。
父级是更新
如果父请求是更新,那么在 separate-transaction sparql-update 之后发出的请求将是可见的。除了确保在 sparql-update 之后读取数据外,您不需要做任何特别的事情。
父级是查询
如果父请求是查询,那么它会运行在设置的时间戳处运行,并且不会看到 sparql-update 的结果。在这种情况下,您还希望将 运行 和 sem:sparql
作为一个单独的事务,这将允许它看到已经完成的更新事务的结果。
请注意,如果父项是一个查询,从技术上讲,使其成为更新是可行的,但这不太可能是一个好的计划。在那种情况下,整个父请求需要担心更多的锁。