gpt4 book ai didi

database - 分片对性能有何影响?

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:20 26 4
gpt4 key购买 nike

我是分片的新手,想知道分片对各种查询有什么影响。对于名为“people”的示例数据集:

person_id | person_fname | person_lname | person_dob
----------------------------------------------------
1 | John | Smith | 1972-03-04
2 | Sally | Jones | 1968-09-14
3 | Phil | Forrester | 1976-11-25
4 | Gwen | Langley | 1955-04-20
5 | Pedro | Romero | 1962-12-21
6 | Gene | Halford | 1978-01-11
7 | Juan | Peza | 1977-08-07
8 | Pierre | Henry | 1980-04-30

通过创建代理身份“id”的散列,数据在四个节点之间平均分片。但是,您需要对可能跨越所有节点的记录执行读写操作,例如:

SELECT person_fname, 
person_lname
FROM people
WHERE person_dob > '1970-01-01'

或者假设您还有一个“订单”表,它引用了“person_id”列中的“people”,并且想要执行连接...

SELECT    order_id,
order_amount,
order_date,
person_fname,
person_lname
FROM orders
LEFT JOIN people
WHERE order_amount > 50

实际上所有节点都将并行运行查询吗?我假设每台服务器在每个步骤中要做的工作更少,而不是一个实例同时运行八个记录的查询,四个实例将同时运行两个(ish)记录的查询,进一步的好处是如果 DBMS能够执行分片选择然后其他节点不需要继续执行任何进一步的指令,这个假设是否正确?

分片和复杂连接是否有任何已知的性能影响(除了这个简单示例之外)?

最佳答案

它确实允许并行完成。

如果连接必须跨越不同的分片,它确实会使连接变得复杂,因此速度变慢。

但是,对于多对一,如果您有例如orders 以这样的方式分片,即 orders 表中的所有行都与 people 表中的相关行在同一个分片中,然后这个不会发生跨分片问题。

您需要设计您的分片方法,以便您会遇到很多这样的情况,并且很少(最好没有)最终交叉分片。

您还希望将分片放在您实际最常寻找的键上。例如。如果您通过用户名找到人作为其他一切的起点,那么您希望通过用户名而不是 id 进行分片,因为当找到他们时您已经知道要击中哪个分片,而不是必须击中所有的人只是为了从大多数返回零行。

关于database - 分片对性能有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12157026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com