数据库分片在django使用MySQL



嗨,我一直在尝试提高db的性能,并做了一些关于有一个db分区和db分片的基本研究,也有两个db一个用于写,另一个用于读。

然而,我发现db分片是最好的方法,因为分片提供的映射是动态的,这是一个要求,坦率地说,我提供了下面的2个案例

案例1:-我们需要获得用户的所有交易(这是巨大的)案例2:-我们需要所有用户在特定时间间隔内的所有数据(这也是巨大的)

由于上述场景,我希望实现db分片

注意:-我已经将一些db分离到多个数据库中,并且它们位于不同的机器上,所以我希望它应用于所有这些多个数据库

我在找什么:

  1. 任何可能有帮助的链接
  2. 任何可能有帮助的代码片段

Django = = 3.2.13MySql == 5.7

让我来定义一些术语,这样它们就会出现在同一个页面上";

复制或集群—多个服务器拥有相同的数据集。它们通过自动将所有写操作从一台服务器传输到另一台服务器来保持同步。一个主要用途是缩放读取;它允许多个客户端同时连接。

<<p>分区/strong>这将根据日期或其他东西将一个表分成几个表。这是在MySQL的单个实例中完成的。关于性能有很多误解。的主要有效用途是清除庞大数据集中的旧数据。

分片这涉及到在多个服务器上分割数据集。典型的情况是按user_id(或数据中的其他列)进行分割。用例是缩放写入。(在纯MySQL上,开发人员必须开发大量代码来实现分片。有一些附加组件,特别是在MariaDB中,可以提供帮助。

你的用例

你的"2dbs",一个用于写,另一个用于读。听起来像2台服务器的复制。它可能不会给你带来你希望的那么多好处。

您正在讨论返回数百万行的SELECTs。以上任何一种方法本身都没有这样的好处,即使您有几个同时这样做的连接。

请提供一些数字——RAM大小,innodb_buffer_pool_size的设置,大SELECTs的数据集大小(GB)。有了这些数字,我就可以讨论"缓存"了。I/O和性能。在相同的数据集上执行多个查询可能受益于在单个服务器上进行缓存。

Replication和Sharding不能共享缓存;分区基本上没有影响。也就是说,我会试着劝阻你不要采用一种既没有帮助又可能有害的技术。

请进一步描述你的任务;也许其中一种技术会有帮助。

注:复制、分区和分片大多是正交的。它们的任何组合都可以组合在一起。(但很少)

最新更新