在SQL Azure中设计可扩展数据库时需要帮助

在SQL Azure中设计可扩展数据库时需要帮助,sql,database,database-design,azure,azure-sql-database,Sql,Database,Database Design,Azure,Azure Sql Database,我的任务是为一个非政府组织(非政府组织)设计和开发一个web应用程序,该组织在许多城镇和村庄开办小学。申请书将记录所有学校、学生、志愿者和每所学校的教师。目前,该非政府组织的保护伞下大约有30所学校,但他们有非常雄心勃勃的计划,将迅速增加数量。 我们将使用sqlazure作为数据库,在windowsazure上托管应用程序。现在,我面临着一项艰巨的任务,即如何以最低的开支设计其数据库(因为该非政府组织的资金完全来自慈善机构和捐款)。您可能知道,SQLAzure中的数据库具有特定的大小,如5、10

我的任务是为一个非政府组织(非政府组织)设计和开发一个web应用程序,该组织在许多城镇和村庄开办小学。申请书将记录所有学校、学生、志愿者和每所学校的教师。目前,该非政府组织的保护伞下大约有30所学校,但他们有非常雄心勃勃的计划,将迅速增加数量。 我们将使用sqlazure作为数据库,在windowsazure上托管应用程序。现在,我面临着一项艰巨的任务,即如何以最低的开支设计其数据库(因为该非政府组织的资金完全来自慈善机构和捐款)。您可能知道,SQLAzure中的数据库具有特定的大小,如5、10、20到50GB,它对每个数据库的最大大小进行了限制。我提出了以下方法:

1) 为每所学校创建一个5或10 GB大小的独立数据库。每个数据库都有“学生”、“科目”、“出勤率”等表。这种方法的问题是必须创建大量数据库。每所学校一个。这将大大提高成本。最初,10GB大小的很大一部分将未得到充分利用,但将来可能会出现10GB似乎不足以存储学校数据的情况

2) 保留一个包含“学校”、“学生”、“出勤率”等表格的单一数据库。这将使最初的成本保持较低,但随着非政府组织开设更多学校,数据库将开始填满,并可能达到50GB的最大限制。此外,“学生”尤其是“出勤”的单个表将有大量记录,并且会使查询速度变慢。即使我们在将来添加另一个数据库,那么在多个数据库之间拆分表有多容易呢

考虑到这些限制,我们无法继续。 您的任何方法或建议都将对我们非常有帮助。 提前谢谢


编辑:非常感谢回答我问题的人。我明白了:5GB是一个巨大的空间,它不会很快被填满。但这给我带来了一个问题:考虑一个情况,当学校的数量增长到200, 300或1000!那么我的数据库设计应该如何呢?我想在这种情况下,50GB不会太大

50G的数据量太大了。学校人员和出勤率是一个相当小的问题。一个设计合理的数据库至少在几十年内不可能接近50G。

即使是60所学校也不应该生成那么多数据,即使你正在跟踪某种标准化测试数据。如果在四分之一制中有一所6至12年级的中学(我以美国为参考),平均每个学生6班,学校1000名学生,那么每年只有24000个班级记录。并非所有30所学校都将是中学。50GB应该足够了。我使用了一个数据库,其中包含美国最大学区之一的招生、考试、学生和教师信息。7年多之后,他们的数据库几乎没有达到30GB。

我建议您也看看Azure表存储,以降低成本,而不必担心规模的增长。显然,挑战在于为表存储设计应用程序,这在本质上是“非关系的”;虽然50GB对于大多数数据库来说都是很大的,但也有一些数据库要大得多。历史记录通常是这里的问题,特别是如果您将随着时间的推移添加其他功能,例如lead import

您描述了两种场景:线性碎片和放大架构。线性碎片为每个学校实现一个数据库。放大后,它们都放在同一个数据库中。使用SQL Azure可以考虑其他选项。请参阅我的一篇blob帖子,内容是关于我发布的关于各种可伸缩性模型的白皮书:

SQLAzure还宣布了一项即将推出的功能,名为数据联合。这对你来说是最有可能的。以下是两篇您可能会发现相关的博客文章:

最后一个链接讨论了一个名为Enzo Shard的开源库,我正在构建该库,以帮助开发人员利用SQL Azure Data Federation的未来功能。支持数据联合的版本是Beta版,允许在联合成员(即数据库)之间执行并行查询

最后,请不要错过Cihan(来自Microsoft)的文章,其中详细讨论了此功能:


总之,SQLAzure中的可伸缩性领域正在不断发展。然而,许多功能将提供显著的数据增长和性能机会。

仅凭名称和几个其他字符串/文本,永远不会达到50GB。即使所有的学校都在同一个数据库中,你也能很好地使用5GB。我管理过数百万行更复杂的数据,但从未达到50GB(除非有问题!):

此外,请查看Azure SQL DB中的新功能:它可以帮助您向外扩展而不是向上扩展。

这与其说是一个答案,不如说是一个评论