3.4.?查询处理

3.4.1. 分布式查询计划程序
3.4.2. 分布式查询执行程序

uxmpp集群由master实例和多个worker实例组成。在master上存储有关分片的元数据,数据在worker节点上进行分片和复制。发布到集群上的所有查询都通过master执行。Master将查询分为较小的查询片段,其中每个查询片段可在分片上独立运行。然后,master将查询片段分配给worker,监督其执行,合并其结果,并最终返回给用户。

uxmpp的查询涉及到两个组件:分布式查询计划和执行程序、uxdb查询计划和执行程序。

3.4.1.?分布式查询计划程序

uxmpp的分布式查询继续程序可对SQL进行查询并计划分布式执行。

对于SELECT查询,计划程序首先创建输入查询的计划树,并将其转化为可交换和关联的形式,以便于并行化。它还应用了一些其他优化,以确保可伸缩的方式执行查询,并最大限度的减少网络I/O。

接下来,程序将查询分为两部分,在master和运行的查询和在各个worker上运行的查询片段。Master将这些查询片段分配给worker,以便有效的利用它们所有的资源。在此之后,将分布式查询计划传递给分布式执行程序以供执行。

3.4.2.?分布式查询执行程序

uxmpp分布式执行程序运行分布式查询计划并处理查询执行期间发生的故障。执行程序连接worker节点,将执行任务分配给它们并监督它们执行。如果执行程序无法将任务分配给指定的worker执行程序或者任务执行失败,那么执行程序会将该任务重新动态的分配给其他worker的副本。执行程序处理故障时,只处理查询失败的查询子树,而非处理整个查询。

uxmpp执行器有三种类型:real-tmie、task-tracker、DEFAULT。其中real-time对于处理简单的键-值的增删改查非常有用;task-tracker则适合用于较复杂的SELECT查询;DEFAULT适合访问单个worker节点中的数据。

提示

可以通过运行UXDB的EXPLAIN命令来查看查询的执行过程。

real-time

real-time是uxmpp的执行器默认选项。它适合用于涉及到过滤、聚合和join查询的快速响应。real-time会给每个分片一个连接,并将查询分片发送给它们,然后从每个分片中的获取结果,合并它们,并将最终的结果返回给用户。

由于real-time会给每个分片发送一个连接,因此处理很多分片的时候,可能会达到连接数上限。在这种情况下,执行器会减少worker的分配任务数,避免过压。但是在运行复杂查询的时候无法完全利用资源。因此对于涉及到很多分片或者大型表连接查询的时候,建议使用task-tracker。

此外,real-time执行器检测到简单的INSERT、UPDATE或DELETE查询时,它会将传入的查询分配给具有目标分片的worker,然后由UXDB处理该查询,并将结果返回给用户。如果在分片副本上修改失败,在会将该分片副本标记为无效,以保持数据的一致性。

DEFAULT

当查询所需的数据存储在单个节点上,uxmpp可以将整个查询路由到该节点上运行。然后将结果集通过master节点中继回客户端。这种操作就是通过DEFAULT类型的执行器来执行的。

澳门游戏平台注册网站知道uxmpp跨节点查询是支持大部分SQL。而DEFAULT执行器是100%支持SQL的,但是它只能在一台机器上执行,无法执行并行化操作。

task-tracker

task-tracker类型的执行器非常适合长时间运行的复杂查询,这种类型的执行器只会给每个worker发送一个连接,并将所有查询分片分配给worker上的执行器。然后,worker上的执行器会定期安排新的任务并完成它们,而master上的执行器会定期检查看它们的任务是否完成。

worker执行器可以并发执行多个任务,并发数为uxmpp.max_running_tasks_per_node这种并发限制会避免从内存提供查询时争用I/O的情况。task-tracker执行器旨在处理复杂的查询时,将这些查询重新划分。

XML 地图 | Sitemap 地图