我的任务是为一个非政府组织(非政府组织)设计和开发一个网络应用程序,该组织在许多城镇和村庄开办小学。申请表将记录所有学校、学生、志愿者和每个学校的老师。目前,在非政府组织的保护伞下大约有30所学校,但它们有一个非常雄心勃勃的计划,要迅速增加这一数目。
我们将使用sql azure作为数据库在windowsazure上托管应用程序。现在,我面临着一项艰巨的任务,即如何以最低的支出设计其数据库(因为该非政府组织完全由慈善机构和捐款提供资金)。正如您可能知道的那样,SQL Azure中的数据库以5~10、20到50 GB的特定大小提供,它限制了每个数据库的最大大小。我提出了以下办法:
1)为每个学校创建一个单独的5或10 GB大小的数据库。每个数据库都有“student”、“subject”、“attention”等表。这种方法的问题是必须创建许多数据库。每个学校一个。这将大大增加成本。最初,10GB的很大一部分容量将没有得到充分利用,但在未来,10GB存储学校数据的容量可能会减少。
2)建立一个包含“学校”、“学生”、“出勤率”等表格的单一数据库。这将使最初的成本保持在较低水平,但在一段时间内,随着非政府组织开设更多的学校,数据库将开始填满,并可能达到50GB的最大限制。同时,一个单独的“学生”表,特别是“出勤”表将有大量的记录,并且会使查询变慢。即使我们在将来添加另一个数据库,那么在多个数据库之间拆分表是多么容易。
考虑到这些限制,我们不能再继续下去了。
你方的任何做法或建议对我们都很有帮助。
提前谢谢。
编辑:非常感谢回答我问题的人。我的观点是:5ogb是一个巨大的空间,它不会很快被填满。但这也给我带来了一个问题:考虑一个学校数量增长到200、300或1000所的情况!!那么我的数据库设计应该如何?我想50GB在那种情况下不会太大。
最佳答案
我曾经在一家制造学校系统的公司工作;虽然50GB对大多数人来说都是很大的,但有一些公司的数据库要大得多。历史记录通常是这里的问题,特别是如果您将随着时间的推移添加其他功能,例如导入线索。
您描述了两个场景:线性碎片和扩展架构。线性碎片为每个学校实现一个数据库。放大后它们都放在同一个数据库中。对于sql azure,还需要考虑其他选项。查看我的blob文章中的一篇关于我发布的关于各种可伸缩性模型的白皮书:http://geekswithblogs.net/hroggero/archive/2010/12/23/multitenant-design-for-sql-azure-white-paper-available.aspx
此外,sql azure还宣布了一个即将推出的功能,称为数据联合。这对你来说是最有可能的。以下是两篇您可能会发现相关的博客文章:
http://geekswithblogs.net/hroggero/archive/2011/07/23/preparing-for-data-federation-in-sql-azure.aspx
http://geekswithblogs.net/hroggero/archive/2011/09/07/sharding-library-for-sql-azure-data-federation.aspx
最后一个链接讨论了一个名为enzo shard的开源库,我正在构建它来帮助开发人员利用sql azure数据联合的未来功能。支持数据联合的版本是beta版,允许跨联合成员(即数据库)执行并行查询。
最后,不要错过Cihan(来自微软)的帖子,该帖子详细讨论了这项功能:http://blogs.msdn.com/b/cbiyikoglu/
总之,sql azure中的可伸缩性领域正在发展。然而,许多功能将提供显著的数据增长和性能机会。
关于sql - 在SQL Azure中设计可伸缩数据库所需的帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7436618/