3.3.?分片(shards)

一个shard即该分布式表在worker节点上的某个小表(分布式表行的子集),根据分布式规则,一个worker上一般有多个shard。可以在表ux_dist_shard中查看到表的分片信息:

注意

本例子中使用的employee有4个分片(shard),分布式表的创建和分片设置参考第?4.3.1?节第?5.1?节

上例中澳门游戏平台注册网站可以看到有多个分片,那么数据就会分别写入对应的分片中,可直接从该分片中读取对应的数据。至于这些分片到worker上的映射,即放在哪个worker上,是通过系统的元数据表决定的,可以通过ux_dist_placementux_dist_node查询得出。

SELECT shardid,node.nodename,node.nodeport 
  FROM ux_dist_placement placement 
  JOIN ux_dist_node node 
    ON placement.groupid = node.groupid 
   AND node.noderole = 'primary'::noderole 
 WHERE shardid = 102572;

   shardid |   nodename   | nodeport
-----------+--------------+----------
    102572 | 192.168.1.83 |   5432

提示

uxmpp支持复制分片以防止数据丢失。

分片的意义

根据需要将分片及其副本放在不同的节点上,将包含相关表的相关行的分片放在同一个节点上。这样,它们之间的连接查询可以避免更多的网络消耗,在单节点上就可以执行。

例如一个具有库存、产品和销售的数据库,如果这三个表都有一个商品id作为分发列进行分片,那么当限制为某一个商品的时候,对于该商品的所有查询可以直接在单个worker上高效的运行,包括这些表之间的联合查询。

另外,跨多台计算机分布查询,可以让多台机器同时执行查询。并且可以通过增加新机器来扩展处理速度。上面说过的分片可以提高处理能力,这里则是实现了最大的并行性,即CPU的利用率。

虽然澳门游戏平台注册网站将表分布在多个节点上,以达到查询可以“实时”运行。但是,查询结果仍然需要通过coordinator(或master)节点来进行分发请求命令和收集结果并传回,因此当查询是计数或者统计等聚会函数时,这个加速是最明显的。

XML 地图 | Sitemap 地图