【发布时间】:2018-05-16 17:48:46
【问题描述】:
高级别的 DB 分片的概念是有道理的,将 DB 节点分开,这样就没有一个单独的节点负责所有的持久数据。但是,我对什么构成“碎片”有点困惑。它是跨分片复制整个表,还是通常只复制一个?
例如,如果我们以 twitter 为例,在最基本的层面上,我们需要一个 users 和一个 tweets 表。如果我们根据用户 ID 分片,有 10 个分片,那么分片函数就是userID mod 10 === shard location。然而,这对 tweets 表意味着什么?是单独的(单个数据库表)还是每条推文都根据创建推文的用户 ID 在 10 个表之间划分?
如果是后者,假设我们在用户 ID 以外的其他东西上进行分片,例如,推文创建了时间戳,我们如何知道在哪里查找与 用户相关的信息 如果所有表都根据推文创建时间(用户没有概念)进行分片?
【问题讨论】: