我被赋予了为非政府组织(Non Govt Org)设计和开发网络应用程序的任务,该组织在许多城镇和村庄开办小学。该申请将记录每所学校的所有学校,学生,志愿者和教师。目前非政府组织的大约有30所学校,但他们有非常雄心勃勃的计划,非常迅速地增加这一数字。 我们将使用 SQL Azure 作为数据库在 Windows Azure 上托管应用。现在,我面临着如何以最小的支出设计数据库的艰巨任务(因为非政府组织完全由慈善机构和捐赠资助)。您可能知道SQL Azure中的数据库以特定大小(如5,10,20到50 GB)提供,因此它限制了每个数据库的最大大小。我推出了以下方法:
1)为每所学校创建一个5或10 GB大小的单独数据库。每个数据库都有“学生”,“主题”,“出勤”等表格。这种方法的问题是必须创建大量数据库。每个学校一个。这将大大增加成本。此外,最初10 GB大小的大部分将未得到充分利用,但未来可能会发生10GB对于存储学校数据的影响。
2)使用“学校”,“学生”,“出勤”等表格保留一个数据库。这样可以保持最初的成本低,但是在数据库开始填充的过程中,可能会达到最大限度非政府组织开设的学校数量增加50GB。对于“学生”,尤其是“出勤”而言,单个表格将具有大量记录,并且会使查询变慢。即使我们将来添加另一个数据库,那么将表拆分到多个数据库是多么容易。
记住这些限制我们无法继续前进。 您的任何方法或建议对我们都非常有帮助。 提前谢谢。
编辑:非常感谢人们回答我的问题。我明白了这一点:5O GB是一个巨大的空间,它不会很快被填满。但这给我带来了一个问题:考虑一下学校数量增长到200,300或1000的情况!那怎么应该是我的数据库设计?我想在这种情况下50 GB不会很大。答案 0 :(得分:1)
50千兆字节是一个非常多的数据。学校人员和出勤是一个非常小的问题。数十年来,设计合理的数据库不太可能达到50千兆字节。
答案 1 :(得分:1)
即使您正在跟踪某种标准化的测试数据,即使是60所学校也不应该生成那么多数据。如果在四分之一系统中有一个6至12年级的中学(我使用美国作为参考),平均每个学生有6个班级,学校有1000个学生,每个班级只有24,000个班级记录。年。并非所有30所学校都是中学。 50GB应该足够了。我使用了一个数据库,其中包含美国最大的学区之一的注册,测试,学生和教师信息。 7年多以后,他们的数据库几乎没有接近30GB。
答案 2 :(得分:1)
我曾经在一家制造学校系统的公司工作;虽然大多数人认为50GB会很大,但有些人的数据库要大得多。历史记录通常是此处的问题,特别是如果您将随时间添加其他功能,例如潜在客户导入。
您描述了两种情况:线性分片和向上扩展体系结构。线性分片在每个学校实现一个数据库。按比例放大将它们全部放在同一个数据库中。 SQL Azure还有其他选项需要考虑。请参阅我发布的一篇关于各种可扩展性模型的白皮书:http://geekswithblogs.net/hroggero/archive/2010/12/23/multitenant-design-for-sql-azure-white-paper-available.aspx
此外,SQL Azure还宣布了一项名为Data Federation的即将推出的功能。这很可能适合你。以下是您可能认为相关的两篇博文:
最后一个链接讨论了一个名为Enzo Shard的开源库,我正在构建该库以帮助开发人员利用SQL Azure Data Federation的未来功能。支持数据联合的版本是Beta版,允许跨联合成员(即数据库)执行并行查询。
最后,请不要错过Cihan(来自Microsoft)更详细地讨论此功能的帖子:http://blogs.msdn.com/b/cbiyikoglu/
总之,SQL Azure中的可伸缩性领域正在不断发展。然而,许多功能将会带来显着的数据增长和性能机会。
答案 3 :(得分:1)
另外,请查看Azure SQL DB中的新Elastic Scale功能:这可以帮助您向外扩展而不是向上扩展。
答案 4 :(得分:0)
我建议你看一下Azure Table Storage,以降低成本,同时不必担心增长规模。显然,挑战在于设计表格存储应用程序本质上是“非关系”的。
答案 5 :(得分:0)
您永远不会只使用名称和其他几个字符串/文本来达到50GB。即使所有学校都在同一个数据库中,你也会有5GB的优势。我管理着数百万行更复杂的数据,从未达到50GB(除非出现问题!):)