Требуется помощь в разработке масштабируемой базы данных в SQL Azure - PullRequest
2 голосов
/ 15 сентября 2011

Мне было поручено спроектировать и разработать веб-приложение для неправительственной организации (Non Govt Org), которая управляет начальными школами во многих городах и деревнях.Приложение будет вести учет всех школ, учащихся, волонтеров и учителей каждой школы.В настоящее время в ведении НПО находится около 30 школ, но у них очень амбициозный план по быстрому увеличению их числа.Мы разместим приложение на Windows Azure , используя SQL Azure в качестве базы данных.Теперь передо мной стоит сложная задача: как разработать свою базу данных с минимальными затратами (поскольку НПО полностью финансируется за счет благотворительных взносов и пожертвований).Поскольку вы, возможно, знаете, что базы данных в SQL Azure предлагаются в определенных размерах, например от 5,10,20 до 50 ГБ, это накладывает ограничение на максимальный размер каждой базы данных.Я предложил следующие подходы:

1) Для каждой школы создайте отдельную базу данных размером 5 или 10 ГБ.Каждая база данных будет иметь такие таблицы, как «студент», «предмет», «посещаемость» и т. Д. Проблема в этом подходе заключается в том, что потребуется создать много баз данных.Один на каждую школу.Это резко увеличило бы стоимость.Также изначально большая часть размером 10 ГБ будет использоваться недостаточно, но в будущем может случиться так, что 10 ГБ будет казаться меньше для хранения школьных данных.

2) Держите единую базу данных с таблицами типа «школа», «ученик», «посещаемость» и т. д. Изначально это позволило бы снизить стоимость, но с течением времени база данных начнет заполняться и может достигнуть максимального предела в 50 ГБ, так как НПО открывает больше школ.Также одна таблица для «ученика» и особенно «посещаемости» будет иметь огромное количество записей и замедлять запросы.Даже если в будущем мы добавим еще одну базу данных, насколько легко будет разбить таблицы на несколько баз данных.

Учитывая ограничения, мы не сможем продолжить.Любой подход или предложение от вас будет очень полезным для нас.Заранее спасибо.

РЕДАКТИРОВАТЬ: Спасибо большое, что люди ответили на мой вопрос.я понял: 50 ГБ - это огромное пространство, и оно не заполняется в ближайшее время.Но это вызывает у меня вопрос: рассмотрим ситуацию, когда количество школ вырастет до 200, 300 или 1000!Тогда как должен быть мой дизайн базы данных?Я полагаю, что 50 ГБ не будет большим в этой ситуации.

Ответы [ 6 ]

1 голос
/ 26 марта 2015

Кроме того, ознакомьтесь с новой функцией Elastic Scale в базе данных SQL Azure: она может помочь вам уменьшить масштаб, а не увеличивать его.

1 голос
/ 17 сентября 2011

Раньше я работал в компании, которая делает школьные системы;хотя 50 ГБ считалось бы большим для большинства из них, у некоторых были базы данных, которые были намного больше.Исторические записи обычно являются проблемой здесь, особенно если со временем вы добавите дополнительные функции, такие как импорт потенциальных клиентов.

Вы описали два сценария: линейный осколок и масштабную архитектуру.Линейный осколок реализует базу данных для каждой школы.Увеличение масштаба помещает их все в одну базу данных.Существуют дополнительные параметры, которые необходимо учитывать в SQL Azure.Посмотрите одно из моих сообщений блобов о опубликованном мною официальном документе о различных моделях масштабируемости: http://geekswithblogs.net/hroggero/archive/2010/12/23/multitenant-design-for-sql-azure-white-paper-available.aspx

Также в SQL Azure анонсирована новая функция под названием Data Federation.Это наиболее вероятно для вас.Вот два сообщения в блоге, которые могут вас заинтересовать:

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Шард, который я создаю, чтобы помочь разработчикам воспользоваться будущими возможностями SQL Azure Data Federation.Версия, которая поддерживает объединение данных, находится в бета-версии и позволяет выполнять параллельные запросы для всех участников федерации (т. Е. Баз данных).

Наконец, не пропустите сообщения Cihan (от Microsoft), в которых эта функция рассматривается более подробно.подробности: http://blogs.msdn.com/b/cbiyikoglu/

Таким образом, область масштабируемости в SQL Azure развивается.Тем не менее, появятся многие возможности, обеспечивающие значительный рост объемов данных и производительности.

1 голос
/ 15 сентября 2011

Даже 60 школ не должны генерировать такое количество данных, даже если вы отслеживаете какие-то стандартизированные тестовые данные.Если в системе кварталов есть средняя школа с 6 по 12 класс (я использую США для справки) со средним числом 6 классов на одного ученика и 1000 учащихся в школе, то будет только 24 000 записей классов на каждого ученика.год.Не все 30 школ будут средними.50 ГБ должно быть достаточно.Я работал с базой данных, содержащей информацию о зачислении, тестировании, сведениях о студентах и ​​преподавателях для одного из крупнейших школьных округов в Соединенных Штатах.Через 7 с лишним лет их база данных едва приблизилась к 30 ГБ.

1 голос
/ 15 сентября 2011

50 гигабайт - это очень много данных. Школьный персонал и посещаемость - довольно маленькая проблема. Правильно спроектированная база данных вряд ли приблизится к 50 гигабайтам в течение десятилетий, по крайней мере.

0 голосов
/ 16 июля 2014

Вы никогда не получите 50 ГБ только с именами и парой других строк / текста.Даже со всеми школами в одном и том же БД у вас будет хорошо с 5 ГБ.Я управлял миллионами строк более сложных данных и никогда не достигал 50 ГБ (если не было проблемы!) :)

0 голосов
/ 16 сентября 2011

Я бы посоветовал вам взглянуть на хранилище таблиц Azure, чтобы снизить расходы, не беспокоясь о росте размера. Очевидно, что задача будет заключаться в разработке вашего приложения для хранения таблиц, которое по своей природе является «нереляционным».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...