加快数据库性能的8项技术( 二 )


仅在MySQL / MariaDB中的ID简单地分区:
ALTER TABLE shopping_cartsPARTITION BY RANGE(id)( Partition p0 VALUES LESS THAN (1234),Partition p1 VALUES LESS THAN (4567),Partition p2 VALUES LESS THAN MAXVALUE);您希望数据库系统的用户仍然能够使用典型查询查询数据库,或许使用以下内容:
SELECT * FROM shopping_carts WHERE cart_id = 3这里有一个重要的事情:水平分区完全无关与水平缩放!
6.垂直分区我们可以根据行划分大数据库,而是可以按列划分 。这可能会给你一种不安的感觉,因为你在大学学习了一个正常化数据库是一个好主意 。这里要注意的重要事项是我们正在谈论数据库设计中的不同阶段 。各种数据库正常形式与逻辑设计有关 。在这个阶段,我们照顾了物理设计 。
应用程序的不同部分可能不需要行的大多数列 。出于这个原因,可以将它们分开 。因此,垂直分区也称为行分离 。
一个常用的实践是从内容中拆分元数据 。这是一个图片:

加快数据库性能的8项技术

文章插图
> Image by Martin Thoma
这里有一个重要的事情:垂直分区与垂直缩放完全无关!
当您避免隐私或监管问题时,垂直分区可能很有用 。想想信用卡信息 。这可以符合其他信息符合良好,但大多数应用程序都不需要它 。您甚至可能将其放在完全不同的数据库中,并将其隐藏在私人微服务后面 。
分片 - 以下一级分配您已经看到数据可以以两种不同的方式分组 。它可能已经有意义地分区同一台计算机以帮助数据库更快地执行常见查询 。但如果数据库最大限度地熄灭CPU或RAM,则使用不同的机器可能有意义 。
分片正在划分单个逻辑数据集并将其分发在不同的机器上 。
正如您可能猜到的那样,这有很多问题 - 因此应该只应该是你最后的出路 。例如,由于2010年10月(来源)的分配问题,FourSquare已下降了11小时 。到目前为止,我一直很幸运,我不必处理分片 。
第一个明显的问题是您的应用程序需要知道哪些碎片包含您正在寻找的数据 。因此,您的应用程序逻辑受到影响,可能在所有地方受到影响 。
第二个大问题是横跨碎片加入 。
第三个问题是如何定义分片 。要真正可扩展,您想要进行动态定义分片 。拥有分层结构可以帮助实现这一目标 。
8.数据库群集在看Vitess时,我只会遇到这个术语 。这个想法似乎隐藏了碎片的问题,也是在引擎盖下使用复制:
WintgreSQL还有文档,MySQL群集是另一种产品 。
奖金:查询缓存如果您有一些沉重的查询,该查询是对很少发生更改的数据,您可以尝试缓存查询 。我不确定默认情况下的数据库提供了什么,但您可以简单地将键值存储置于该查询的位置 。您可以直接向数据库发送查询,而不是将查询发送到在键值存储中查找它的微服务 。如果它不存在或无效,则会查询真实数据库 。
缺点是您不知道您获得的数据是否是最近的数据 。
让我们总结一下!
加快数据库性能的8项技术

文章插图
 
下一步是什么?一些主题对于发展至关重要,但不是日常工作或计算机科学课程的一部分 。在我们专业的软件开发系列中,您可以了解更多主题 。
 
(本文由闻数起舞翻译自Iris Winter的文章《8 Techniques To Speed up Your Database》,转载请注明出处,原文链接:
https://betterprogramming.pub/8-techniques-to-speed-up-your-database-292754ff7739)




推荐阅读