Marklogic数据库的反应式方法
Reactive approach of Marklogic database
Marklogic 是否支持背压或允许以响应方式发送数据块?
'Reactive' 是一个相当新的术语,描述了服务器和数据库技术中常见的旧概念的特定化身,但对于现代客户端和中间层编程来说是相当新的。
我假设问题是由 need/desire 提出的,以便在现有的 'Reactive' 框架(例如 vert.x 或 Rx/Java)中工作。对于这个问题,答案是 'no' - 据我所知,没有 'official' API 直接与这些框架集成。有社区 APIs 我没有亲自使用过,例如 https://github.com/etourdot/vertx-marklogic (reactive, vert.x marklogic API).
MarkLogic 是一个 'reactive' 内部设计,因为它实现了现代 'reactive' 术语用来描述的功能——但没有为此公开任何标准 'reactive APIs'(那里这方面的标准很少)。 MarkLogic 服务器 (xquery,javascript) 中的代码 运行 隐含地从中受益 - 尽管没有明确的背压 API,这是单线程阻塞 IO 的副作用(从应用程序的角度来看) 'back pressure' 的等价物是由 IO APIS 的隐式流量控制实现的——您不能在执行阻塞 IO 的单个线程上过度驱动正确配置的 ML 服务器。与过载服务器的连接将花费更长的时间并最终超时 ('backpressure' :)
同样,(大部分)外部 APIs(REST、XCC)也是阻塞的、单线程的。
服务器核心通过多种方法管理速率控制,例如主动管理 TCP 连接队列大小、保持活动时间、活动线程数等。
一般来说,服务器在这方面做得很好,不需要明确的低级编程,可以平衡所有客户端的延迟。如果这需要改进,管理指南对如何调整各种参数有很好的指导,以便系统自行运行良好。
如果您想实现每个连接的客户端感知 'reactive' API 您需要自己实现。这可以使用用于其他阻塞 IO API 的相同技术来完成——即使用多线程或非阻塞 IO。一些 ML SDK 提供了非阻塞 IO 或超时控制,可用于实现 'reactive' API。
类似地,服务器本身(XQuery 或 JavaScript)中的代码 运行 可以通过使用任务队列实现 'reactive' 类型的行为——如 xdmp:spawn-xxx API。许多图书馆都这样做以管理批量摄取。必须小心谨慎地控制并发量,因为产生太多并发请求很容易使服务器过载。管理状态有点棘手,因为事务模型和任务创建之间存在 interaction/opposition —— 前者通常呈现幂等数据视图,这与异步任务的概念 'current' 不一致。
Marklogic 是否支持背压或允许以响应方式发送数据块?
'Reactive' 是一个相当新的术语,描述了服务器和数据库技术中常见的旧概念的特定化身,但对于现代客户端和中间层编程来说是相当新的。
我假设问题是由 need/desire 提出的,以便在现有的 'Reactive' 框架(例如 vert.x 或 Rx/Java)中工作。对于这个问题,答案是 'no' - 据我所知,没有 'official' API 直接与这些框架集成。有社区 APIs 我没有亲自使用过,例如 https://github.com/etourdot/vertx-marklogic (reactive, vert.x marklogic API).
MarkLogic 是一个 'reactive' 内部设计,因为它实现了现代 'reactive' 术语用来描述的功能——但没有为此公开任何标准 'reactive APIs'(那里这方面的标准很少)。 MarkLogic 服务器 (xquery,javascript) 中的代码 运行 隐含地从中受益 - 尽管没有明确的背压 API,这是单线程阻塞 IO 的副作用(从应用程序的角度来看) 'back pressure' 的等价物是由 IO APIS 的隐式流量控制实现的——您不能在执行阻塞 IO 的单个线程上过度驱动正确配置的 ML 服务器。与过载服务器的连接将花费更长的时间并最终超时 ('backpressure' :)
同样,(大部分)外部 APIs(REST、XCC)也是阻塞的、单线程的。 服务器核心通过多种方法管理速率控制,例如主动管理 TCP 连接队列大小、保持活动时间、活动线程数等。
一般来说,服务器在这方面做得很好,不需要明确的低级编程,可以平衡所有客户端的延迟。如果这需要改进,管理指南对如何调整各种参数有很好的指导,以便系统自行运行良好。
如果您想实现每个连接的客户端感知 'reactive' API 您需要自己实现。这可以使用用于其他阻塞 IO API 的相同技术来完成——即使用多线程或非阻塞 IO。一些 ML SDK 提供了非阻塞 IO 或超时控制,可用于实现 'reactive' API。
类似地,服务器本身(XQuery 或 JavaScript)中的代码 运行 可以通过使用任务队列实现 'reactive' 类型的行为——如 xdmp:spawn-xxx API。许多图书馆都这样做以管理批量摄取。必须小心谨慎地控制并发量,因为产生太多并发请求很容易使服务器过载。管理状态有点棘手,因为事务模型和任务创建之间存在 interaction/opposition —— 前者通常呈现幂等数据视图,这与异步任务的概念 'current' 不一致。