Database design 为可伸缩性创建数据库

Database design 为可伸缩性创建数据库,database-design,scalability,cluster-computing,load-balancing,rdbms,Database Design,Scalability,Cluster Computing,Load Balancing,Rdbms,如何创建数据库以实现可伸缩性?我不能读ATM,需要离开。但是我想知道更多关于创建一个可扩展的数据库的信息。它在我脑海中提到和发生的一些事情是 读取和写入的单独句柄 当一台服务器繁忙(IO或CPU受限)而我需要两台服务器写入时会发生什么情况 我要创建多个数据库吗?有一个关于用户的集群吗 将用户移动到一个集群到另一个集群会有问题吗 我是否可以对其进行编码,以便集群A中DB A中的用户ABC和集群B中DB B中的DEF具有相同的主键 当我将上面的移动到集群C时?这是否意味着我需要编写大量代码才能将它

如何创建数据库以实现可伸缩性?我不能读ATM,需要离开。但是我想知道更多关于创建一个可扩展的数据库的信息。它在我脑海中提到和发生的一些事情是

  • 读取和写入的单独句柄
  • 当一台服务器繁忙(IO或CPU受限)而我需要两台服务器写入时会发生什么情况
  • 我要创建多个数据库吗?有一个关于用户的集群吗
  • 将用户移动到一个集群到另一个集群会有问题吗
  • 我是否可以对其进行编码,以便集群A中DB A中的用户ABC和集群B中DB B中的DEF具有相同的主键
  • 当我将上面的移动到集群C时?这是否意味着我需要编写大量代码才能将它们移动到另一个集群/数据库
  • 为了避免上述问题,我是否会使用主键并通过读取其他集群上的其他DBs手动设置ID

etc

为了创建一个能够很好地扩展99.9%的用例的数据库,不必费心任何这些东西。相反,设计一个适当规范化的模式;使用主键、外键和其他约束以确保完整性;索引表很好。研究DBMS供应商关于性能和可伸缩性主题(如分区、不同的表和索引结构等)的建议,并使用最适合您情况的方法(基准测试选项以证明它们提高了可伸缩性)


当然,如果你为谷歌、Ebay或亚马逊工作,那么你可能会陷入0.1%的阵营,需要扔掉规则书,做所有你读到的疯狂的事情。但我猜你不会,对吗?

为了补充Tony的建议,我会说将数据库正确地划分为目录(SQL Server术语,表示物理数据库服务器中的虚拟数据库名称空间),并尽量减少目录之间的依赖性,即查询级别的依赖性。如果存在依赖项,请确保它们是只读的

这将允许您在需要时将目录移动到不同的物理服务器。只读的要求是,如果您将某个目录从某个服务器上移开,而该服务器上的某个目录对另一个目录(在同一物理服务器上)具有只读依赖性,则可以继续将相关数据复制到要将某个目录移到的新物理服务器上的只读目录

由于复制通常是单向功能,因此存在只读要求。这意味着您只能有一台服务器作为写主机,而其他服务器只接收数据以便在本地从中读取


关于复制的建议对于最坏的情况非常有用,而且只适用于一次。它不是一个用于临时数据库增长的解决方案。如果必须以这种方式发展,那么您应该远离RDBMS。使用正确的数据模型,目录的复制可以自由移动

当一台服务器忙(IO或CPU受限)而我需要两台服务器写入时会发生什么情况?

如果您正在执行分布式事务,那么您会遇到麻烦,因此您必须提前计划,以确保分布式事务目标服务器上的负载是一致的

是否创建多个数据库?是否有用户群集?

这是一个非常好的解决方案:p.您必须正确地获取共享数据模型,这样您就不会在共享目录上形成瓶颈

将用户移动到一个群集到另一个群集时会出现问题吗?

不,分布式事务是为了赢。你需要一个优秀的程序员来确保事情正确发生

我是否可以对其进行编码,以便集群A中DB A中的用户ABC和集群B中DB B中的DEF具有相同的主键?


否,在主RDBMS/LDAP服务器上分配主键。您不希望出现此类主键冲突。您选择的方法取决于此操作是否正确——您需要全局唯一的用户id。在这种情况下,您将拥有共享数据,如果您没有GU-PK,您将如何将用户的数据与共享数据联系起来

RDBMS对于保持一致性和事务性数据非常有用,但它们需要大量的专家规划才能扩展到每秒100到数千个事务。我将构建一个nosql云,将从RDBMS构建的文档转储到其中


因此,您使用RDBMS作为原始数据,使用nosql数据库作为RDBMS的视图。

您需要多少可伸缩性?