Варианты хранения данных (создание облачных приложений в реальном мире с помощью Azure)Data Storage Options (Building Real-World Cloud Apps with Azure)

Майк Уоссон, Рик Андерсон (, том Dykstra)by Mike Wasson, Rick Anderson, Tom Dykstra

Скачивание решения ИТ-проекта или Загрузка электронной книгиDownload Fix It Project or Download E-book

Создание реальных облачных приложений с помощью электронной книги Azure основано на презентации, разработанной Скотт Гатри (.The Building Real World Cloud Apps with Azure e-book is based on a presentation developed by Scott Guthrie. В нем объясняются 13 шаблонов и методик, которые могут помочь в успешной разработке веб-приложений для облака.It explains 13 patterns and practices that can help you be successful developing web apps for the cloud. Сведения о электронной книге см. в первой главе.For information about the e-book, see the first chapter.

Большинство пользователей используются для реляционных баз данных, и они обычно задают другие варианты хранения данных при проектировании облачного приложения.Most people are used to relational databases, and they tend to overlook other data storage options when they're designing a cloud app. Результат может быть неоптимальной производительностью, большими затратами или хуже, так как NoSQL (нереляционные) базы данных могут обрабатывать некоторые задачи более эффективно, чем реляционные базы данных.The result can be suboptimal performance, high expenses, or worse, because NoSQL (non-relational) databases can handle some tasks more efficiently than relational databases. Когда клиенты запрашивают у нас помощь в решении проблемы с хранилищем критических данных, часто это связано с тем, что у них есть реляционная база данных, где один из вариантов NoSQL бы лучше работала.When customers ask us for help resolving a critical data storage problem, it's often because they have a relational database where one of the NoSQL options would have worked better. В таких ситуациях клиент был бы лучше, если бы он реализовал решение NoSQL перед развертыванием приложения в рабочей среде.In those situations the customer would have been better off if they had implemented the NoSQL solution before deploying the app to production.

С другой стороны, это также ошибочно полагать, что база данных NoSQL может делать все правильно или достаточно хорошо.On the other hand, it would also be a mistake to assume that a NoSQL database can do everything well or well enough. Не существует одного оптимального варианта управления данными для всех задач хранилища данных. различные решения для управления данными оптимизированы для различных задач.There is no single best data management choice for all data storage tasks; different data management solutions are optimized for different tasks. Большинство реальных облачных приложений имеют разнообразные требования к хранению данных и часто обслуживаются с помощью сочетания нескольких решений для хранения данных.Most real-world cloud apps have a variety of data storage requirements and are often served best by a combination of multiple data storage solutions.

Цель этой главы — предоставить вам более широкие возможности хранения данных, доступные для облачного приложения, а также некоторые основные рекомендации по выбору тех, которые соответствуют вашему сценарию.The purpose of this chapter is to give you a broader sense of the data storage options available to a cloud app, and some basic guidance on how to choose the ones that fit your scenario. Перед разработкой приложения лучше учитывать доступные варианты и думать о их сильных и слабых сторонах.It's best to be aware of the options available to you and think about their strengths and weaknesses before you develop an application. Изменение параметров хранения данных в рабочем приложении может оказаться чрезвычайно сложным, например, при необходимости изменения подсистемы Jet, когда плоскость находится в полете.Changing data storage options in a production app can be extremely difficult, like having to change a jet engine while the plane is in flight.

Варианты хранения данных в AzureData storage options on Azure

Облако позволяет относительно легко использовать различные реляционные и NoSQL хранилища данных.The cloud makes it relatively easy to use a variety of relational and NoSQL data stores. Ниже приведены некоторые платформы хранения данных, которые можно использовать в Azure.Here are some of the data storage platforms that you can use in Azure.

В таблице показаны четыре типа баз данных NoSQL:The table shows four types of NoSQL databases:

  • Базы данных "ключ — значение " хранят один сериализованный объект для каждого значения ключа.Key/value databases store a single serialized object for each key value. Они хорошо подходят для хранения больших объемов данных, которые нужно извлекать по одному элементу с известным значением ключа, если при этом совершенно не требуются запросы по другим свойствам элемента.They're good for storing large volumes of data where you want to get one item for a given key value and you don't have to query based on other properties of the item.

    Хранилище BLOB-объектов Azure — это база данных "ключ-значение", которая работает как хранилище файлов в облаке, со значениями ключей, которые соответствуют именам папок и файлов.Azure Blob storage is a key/value database that functions like file storage in the cloud, with key values that correspond to folder and file names. Вы получаете файл по его папке и имени файла, а не ищете значения в его содержимом.You retrieve a file by its folder and file name, not by searching for values in the file contents.

    Хранилище таблиц Azure также является базой данных "ключ — значение".Azure Table storage is also a key/value database. Каждое значение называется сущностью (аналогично строке, определяемой ключом секции и ключом строки) и содержит несколько свойств (аналогично столбцам, но не все сущности в таблице должны совместно использовать одни и те же столбцы).Each value is called an entity (similar to a row, identified by a partition key and row key) and contains multiple properties (similar to columns, but not all entities in a table have to share the same columns). Запросы к столбцам, отличным от ключа, чрезвычайно неэффективны, поэтому их следует избегать.Querying on columns other than the key is extremely inefficient and should be avoided. Например, можно хранить данные профиля пользователя с одним разделом, в котором хранятся сведения об отдельном пользователе.For example, you can store user profile data, with one partition storing information about a single user. Вы можете хранить такие данные, как имя пользователя, хэш пароля, Дата рождения и т. д., в отдельных свойствах одной сущности или в отдельных сущностях в одной секции.You could store data such as user name, password hash, birth date, and so forth, in separate properties of one entity or in separate entities in the same partition. Но не нужно запрашивать всех пользователей с заданным диапазоном дат рождения, и нельзя выполнять запрос JOIN между таблицей профиля и другой таблицей.But you wouldn't want to query for all users with a given range of birth dates, and you can't execute a join query between your profile table and another table. Хранилище таблиц является более масштабируемым и дешевле, чем реляционная база данных, но не включает сложные запросы и объединения.Table storage is more scalable and less expensive than a relational database, but it doesn't enable complex queries or joins.

  • Документдатабасес — это базы данных ключей и значений, в которых значения являются документами.Documentdatabases are key/value databases in which the values are documents. "Документ" не используется в смысле документа Word или Excel, но означает набор именованных полей и значений, любой из которых может быть дочерним документом."Document" here isn't used in the sense of a Word or Excel document but means a collection of named fields and values, any of which could be a child document. Например, в таблице журнала заказа документ заказа может содержать поля номер заказа, Дата заказа и клиент. в поле "клиент" могут быть поля "имя" и "адрес".For example, in an order history table an order document might have order number, order date, and customer fields; and the customer field might have name and address fields. База данных кодирует данные полей в таком формате, как XML, YAML, JSON или BSON. или может использовать обычный текст.The database encodes field data in a format such as XML, YAML, JSON, or BSON; or it can use plain text. Одна из функций, устанавливающих базы данных документов отдельно от баз данных "ключ — значение", — это возможность запрашивать неключевые поля и определять вторичные индексы, чтобы сделать запросы более эффективными.One feature that sets document databases apart from key/value databases is the ability to query on non-key fields and define secondary indexes to make querying more efficient. Эта возможность делает базу данных документов более подходящей для приложений, которым требуется получить данные на основе критериев, более сложных по сравнению с ключом документа.This ability makes a document database more suitable for applications that need to retrieve data based on criteria more complex than the value of the document key. Например, в базе данных документов в журнале заказов на продажу можно запрашивать различные поля, такие как идентификатор продукта, идентификатор клиента, имя клиента и т. д.For example, in a sales order history document database you could query on various fields such as product ID, customer ID, customer name, and so forth. MongoDB — это популярная база данных документов.MongoDB is a popular document database.

  • Базы данных-семейства столбцов — это хранилища данных "ключ — значение", которые позволяют структурировать хранилище данных в коллекции связанных столбцов, именуемых семействами столбцов.Column-family databases are key/value data stores that enable you to structure data storage into collections of related columns called column families. Например, база данных переписи может иметь одну группу столбцов для имени человека (первая, средняя, последняя), одну группу для адреса человека и одну группу для сведений профиля пользователя (DOB, Gender и т. д.).For example, a census database might have one group of columns for a person's name (first, middle, last), one group for the person's address, and one group for the person's profile information (DOB, gender, etc.). Затем база данных может хранить каждое семейство столбцов в отдельной секции, сохраняя все данные для одного пользователя, связанного с одним и тем же ключом.The database can then store each column family in a separate partition while keeping all of the data for one person related to the same key. Затем можно считывать все сведения о профиле, не требуя считывания всех сведений об имени и адресе.You can then read all profile information without having to read through all of the name and address information as well. Cassandra — это популярная база данных для семейства столбцов.Cassandra is a popular column-family database.

  • В базах данных Graph данные хранятся в виде коллекции объектов и связей.Graph databases store information as a collection of objects and relationships. База данных графа предназначена для того, чтобы позволить приложению эффективно выполнять запросы, которые проходят через сеть объектов и связи между ними.The purpose of a graph database is to enable an application to efficiently perform queries that traverse the network of objects and the relationships between them. Например, в базе данных персонала объектами могут являться сотрудники и вам может потребоваться выполнить такой запрос, как "найти всех сотрудников, которые прямо или косвенно подчиняются Сергею".For example, the objects might be employees in a human resources database, and you might want to facilitate queries such as "find all employees who directly or indirectly work for Scott." Neo4j — это популярная база данных графов.Neo4j is a popular graph database.

По сравнению с реляционными базами данных, параметры NoSQL обеспечивают гораздо более высокую масштабируемость и экономичность при хранении и анализе неструктурированных данных.Compared to relational databases, the NoSQL options offer far greater scalability and cost-effectiveness for storage and analysis of unstructured data. Компромисс заключается в том, что они не предоставляют широкие возможности для запросов и надежной целостности данных в реляционных базах данных.The tradeoff is that they don't provide the rich queryability and robust data integrity capabilities of relational databases. NoSQL хорошо подойдет для данных журнала IIS, в которых задействованы большие объемы томов без необходимости присоединять запросы.NoSQL would work well for IIS log data, which involves high volume with no need for join queries. NoSQL будет работать не так хорошо для банковских транзакций, что требует абсолютной целостности данных и включает множество связей с другими данными, связанными с учетной записью.NoSQL would not work so well for banking transactions, which requires absolute data integrity and involves many relationships to other account-related data.

Также существует новая категория платформы баз данных с именем невскл , которая сочетает масштабируемость базы данных NoSQL с возможностью запросов и целостностью реляционной базы данных.There is also a newer category of database platform called NewSQL that combines the scalability of a NoSQL database with the queryability and transactional integrity of a relational database. Базы данных Невскл предназначены для распределенного хранения и обработки запросов, что часто сложно реализовать в базах данных «Олдскл».NewSQL databases are designed for distributed storage and query processing, which is often hard to implement in "OldSQL" databases. Нуодб — это пример базы данных невскл, которую можно использовать в Azure.NuoDB is an example of a NewSQL database that can be used on Azure.

Hadoop и MapReduceHadoop and MapReduce

Большие объемы данных, которые можно хранить в базах данных NoSQL, могут быть трудными для эффективного анализа.The high volumes of data that you can store in NoSQL databases may be difficult to analyze efficiently in a timely manner. Для этого можно использовать такую платформу, как Hadoop , которая реализует функциональность MapReduce .To do that you can use a framework like Hadoop which implements MapReduce functionality. По сути, процесс MapReduce выполняется следующим образом:Essentially what a MapReduce process does is the following:

  • Ограничьте размер данных, которые необходимо обработать, выбирая из хранилища данных только те данные, которые действительно необходимо проанализировать.Limit the size of the data that needs to be processed by selecting out of the data store only the data you actually need to analyze. Например, вы хотите узнать описывающего своей базы пользователей по году рождения, чтобы выбрать только год рождения из хранилища данных профиля пользователя.For example, you want to know the makeup of your user base by birth year, so you select only birth years out of your user profile data store.
  • Разбейте данные на части и отправляйте их на разные компьютеры для обработки.Break down the data into parts and send them to different computers for processing. Компьютер A вычисляет число людей с 1950-1959 датами, компьютер B выполняет 1960-1969 и т. д. Эта группа компьютеров называется кластером Hadoop.Computer A calculates the number of people with 1950-1959 dates, computer B does 1960-1969, etc. This group of computers is called a Hadoop cluster.
  • Помещайте результаты каждой части обратно вместе после завершения обработки частей.Put the results of each part back together after the processing on the parts is done. Теперь у вас есть сравнительно короткий список, сколько людей для каждого года рождения и задача вычисления процентных долей в этом общем списке является управляемой.You now have a relatively short list of how many people for each birth year and the task of calculating percentages in this overall list is manageable.

В Azure HDInsight позволяет обрабатывать, анализировать и получать новые ценные сведения из больших данных с помощью возможностей Hadoop.On Azure, HDInsight enables you to process, analyze, and gain new insights from big data using the power of Hadoop. Например, его можно использовать для анализа журналов веб-сервера:For example, you could use it to analyze web server logs:

  • Включите ведение журнала веб-сервера в учетной записи хранения.Enable web server logging to your storage account. Это настраивает Azure для записи журналов в службу больших двоичных объектов для каждого HTTP-запроса к приложению.This sets up Azure to write logs to the Blob Service for every HTTP request to your application. Служба BLOB-объектов по сути является облачным хранилищем файлов и хорошо интегрируется с HDInsight.The Blob Service is basically cloud file storage, and it integrates nicely with HDInsight.

    Журналы в хранилище BLOB-объектов

  • По мере того как приложение получает трафик, журналы IIS веб-сервера записываются в хранилище больших двоичных объектов.As the app gets traffic, web server IIS logs are written to Blob storage.

    Журналы веб-сервера

  • На портале щелкните New - Data Services - HDInsight - Быстрое созданиеи укажите имя кластера hdinsight, размер кластера (число узлов данных кластера hdinsight), а также имя пользователя и пароль для кластера hdinsight.In the portal, click New - Data Services - HDInsight - Quick Create, and specify an HDInsight cluster name, cluster size (number of HDInsight cluster data nodes), and a user name and password for the HDInsight cluster.

    HDInsight

Теперь можно настроить задания MapReduce для анализа журналов и получения ответов на такие вопросы:You can now set up MapReduce jobs to analyze your logs and get answers to questions such as:

  • Какое время суток использует мое приложение для получения наибольшего или минимального трафика?What times of day does my app get the most or least traffic?
  • Из каких стран исходят исходящий трафик?What countries is my traffic coming from?
  • Каков средний доход в области, из которой поступил трафик.What is the average neighborhood income of the areas my traffic comes from. (Есть общедоступный набор данных, который обеспечивает доходы по IP-адресу, и вы можете сопоставить его с IP-адресом в журналах веб-сервера.)(There's a public dataset that gives you neighborhood income by IP address, and you can match that against IP address in the web server logs.)
  • Как отношение доходов окружения к конкретным страницам или продуктам на сайте?How does neighborhood income correlate to specific pages or products in the site?

Вы можете использовать ответы на такие вопросы, чтобы ориентироваться на рекламу в зависимости от вероятности того, что клиент заинтересовался или скорее всего купит определенный продукт.You could then use the answers to questions like these to target ads based on the likelihood a customer would be interested in or likely to buy a particular product.

Как объясняется в главе «Автоматизация всех», большинство функций, которые можно выполнять на портале, могут быть автоматизированы и включают настройку и выполнение заданий анализа HDInsight.As explained in the Automate Everything chapter, most functions that you can do in the portal can be automated, and that includes setting up and executing HDInsight analysis jobs. Типичный сценарий HDInsight может содержать следующие шаги:A typical HDInsight script might contain the following steps:

  • Подготавливает кластер HDInsight и свяжите его с учетной записью хранения для входных данных хранилища BLOB-объектов.Provision an HDInsight cluster and link it to your storage account for Blob storage input.
  • Передайте исполняемые файлы задания MapReduce (. jar или. exe) в кластер HDInsight.Upload the MapReduce job executables (.jar or .exe files) to the HDInsight cluster.
  • Отправьте MapReduce, который хранит выходные данные в хранилище BLOB-объектов.Submit a MapReduce that stores the output data to Blob storage.
  • Дождитесь завершения задания.Wait for the job to complete.
  • Удаление кластера HDInsight.Delete the HDInsight cluster.
  • Получите доступ к выходным данным из хранилища BLOB-объектов.Access the output from Blob storage.

Выполнив сценарий, который делает это, вы сократите время, в течение которого будет подготовлен кластер HDInsight, что снизит затраты.By running a script that does all this, you minimize the amount of time that the HDInsight cluster is provisioned, which minimizes your costs.

Платформа как услуга (PaaS) и инфраструктура как услуга (IaaS)Platform as a Service (PaaS) versus Infrastructure as a Service (IaaS)

Приведенные выше варианты хранения данных включают решения "платформа как услуга" (PaaS) и "инфраструктура как услуга" (IaaS).The data storage options listed earlier include both Platform-as-a-Service (PaaS) and Infrastructure-as-a-Service (IaaS) solutions. PaaS означает, что мы работаем с аппаратной и программной инфраструктурой, а вы просто используете службу.PaaS means that we manage the hardware and software infrastructure and you just use the service. База данных SQL — это функция PaaS в Azure.SQL Database is a PaaS feature of Azure. Вы запрашиваете базы данных, и в фоновом режиме Azure устанавливает и настраивает виртуальные машины, а также устанавливает на них базы данных.You ask for databases, and behind the scenes Azure sets up and configures the VMs and sets up the databases on them. У вас нет прямого доступа к виртуальным машинам и управление ими не требуется. IaaS означает, что вы настроили и настраиваете виртуальные машины, которые выполняются в нашей инфраструктуре центра обработки данных, и управляете ими.You don't have direct access to the VMs and don't have to manage them.IaaS means that you set up, configure, and manage VMs that run in our data center infrastructure, and you put whatever you want on them. Мы предоставляем коллекцию предварительно настроенных образов виртуальных машин для распространенных конфигураций виртуальных машин.We provide a gallery of pre-configured VM images for common VM configurations. Например, можно установить предварительно настроенные образы виртуальных машин для Windows Server 2008, Windows Server 2012, BizTalk Server, Oracle для сервера Oracle Database и т. д.For example, you can install pre-configured VM images for Windows Server 2008, Windows Server 2012, BizTalk Server, Oracle WebLogic Server, Oracle Database, etc.

Решения для данных PaaS, предоставляемые Azure, включают:PaaS data solutions that Azure offers include:

  • База данных SQL Azure (прежнее название — SQL Azure).Azure SQL Database (formerly known as SQL Azure). Облачная реляционная база данных на основе SQL Server.A cloud relational database based on SQL Server.
  • хранилище таблиц Azure.Azure Table storage. База данных NoSQL "ключ-значение".A key/value NoSQL database.
  • Хранилище BLOB-объектов Azure.Azure Blob storage. Хранилище файлов в облаке.File storage in the cloud.

Для IaaS можно запустить все, что можно загрузить на виртуальную машину, например:For IaaS, you can run anything you can load onto a VM, for example:

  • Реляционные базы данных, такие как SQL Server, Oracle, MySQL, SQL Compact, SQLite или postgres.Relational databases such as SQL Server, Oracle, MySQL, SQL Compact, SQLite, or Postgres.
  • Хранилища данных "ключ — значение", такие как memcached, Redis, Cassandra и Риак.Key/value data stores such as Memcached, Redis, Cassandra, and Riak.
  • Хранилища данных столбцов, например HBase.Column data stores such as HBase.
  • Базы данных документов, такие как MongoDB, RavenDB и CouchDB.Document databases such as MongoDB, RavenDB, and CouchDB.
  • Базы данных графов, такие как Neo4j.Graph databases such as Neo4j.

Варианты хранения данных в Azure

Параметр IaaS предоставляет почти неограниченные возможности хранения данных, и многие из них особенно просты в использовании, так как вы можете создавать виртуальные машины с помощью предварительно настроенных образов.The IaaS option gives you almost unlimited data storage options, and many of them are especially easy to use because you can create VMs using preconfigured images. Например, на портале управления перейдите к разделу виртуальные машины, перейдите на вкладку образы и щелкните Обзор VM хранилище.For example, in the management portal go to Virtual Machines, click the Images tab, and click Browse VM Depot.

Обзор виртуальной машины хранилище

Затем вы увидите список сотен предварительно настроенных образов виртуальных машин, и вы можете создать виртуальную машину из образа с предварительно установленной системой управления базами данных, например MongoDB, Neo4J, Redis, Cassandra или CouchDB.You then see a list of hundreds of preconfigured VM images, and you can create a VM from an image that has a database management system preinstalled, such as MongoDB, Neo4J, Redis, Cassandra, or CouchDB:

MongoDB в виртуальной машине хранилище

Azure делает возможности хранения данных IaaS простыми в использовании, но предложения PaaS имеют множество преимуществ, которые делают их более экономичными и практичными для многих сценариев:Azure makes IaaS data storage options as easy to use as possible, but the PaaS offerings have many advantages that make them more cost-effective and practical for many scenarios:

  • Вам не нужно создавать виртуальные машины, вы просто используете портал или сценарий для настройки хранилища данных.You don't have to create VMs, you just use the portal or a script to set up a data store. Если требуется хранилище данных 200 терабайта, можно просто щелкнуть кнопку или выполнить команду, а также в течение секунд, пока она готова к использованию.If you want a 200 terabyte data store, you can just click a button or run a command, and in seconds it's ready for you to use.
  • Вам не нужно управлять виртуальными машинами, используемыми службой, или исправлять их. Майкрософт делает это автоматически. — вам не нужно беспокоиться о настройке инфраструктуры для масштабирования или высокой доступности. Корпорация Майкрософт обрабатывает все это за вас.You don't have to manage or patch the VMs used by the service; Microsoft does that for you automatically.- You don't have to worry about setting up infrastructure for scaling or high availability; Microsoft handles all that for you.
  • Вам не нужно покупать лицензии; плата за лицензии включается в сервисные платы.You don't have to buy licenses; license fees are included in the service fees.
  • Вы платите только за то, что используете.You only pay for what you use.

Варианты хранения данных PaaS в Azure включают предложения от сторонних поставщиков.PaaS data storage options in Azure include offerings by third-party providers. Например, можно выбрать надстройку MongoLab из магазина Azure для предоставления базы данных MongoDB в качестве службы.For example, you can choose the MongoLab Add-On from the Azure Store to provision a MongoDB database as a service.

Выбор варианта хранения данныхChoosing a data storage option

Ни один подход не подходит для всех сценариев.No one approach is right for all scenarios. Если кто-то говорит, что эта технология является ответом, первое, что следует спросить, — «что такое вопрос?», поскольку различные решения оптимизированы для разных целей.If anyone says that this technology is the answer, the first thing to ask is "What is the question?", because different solutions are optimized for different things. Реляционная модель имеет определенные преимущества; Вот почему это было так долго.There are definite advantages to the relational model; that's why it's been around for so long. Но есть и другие стороны SQL, которые могут быть решены с помощью решения NoSQL.But there are also down-sides to SQL that can be addressed with a NoSQL solution.

Часто мы видим, что лучше всего это составной подход, где вы используете SQL и NoSQL в одном решении.Often what we see work best is a compositional approach, where you use SQL and NoSQL in a single solution. Даже если люди говорят, что они используют NoSQL, при детализации того, что они делают, часто встречаются несколько различных NoSQL платформ: они используют CouchDB, а Redisи Риак для различных целей.Even when people say they're embracing NoSQL, if you drill into what they're doing you often find that they're using several different NoSQL frameworks: they're using CouchDB, and Redis, and Riak for different things. Даже Facebook, в котором широко используется NoSQL, использует разные платформы NoSQL для разных частей службы.Even Facebook, which uses NoSQL extensively, uses different NoSQL frameworks for different parts of the service. Гибкость, связанная с подходами к хранению данных, — это одна из вещей, которые отлично подходят для облака, так как в одном приложении можно легко использовать несколько решений для работы с данными и интегрировать их.The flexibility to mix and match data storage approaches is one of the things that's nice about the cloud, because it's easy to use multiple data solutions and integrate them in a single app.

Ниже приведены некоторые вопросы, которые следует учесть при выборе подхода.Here are some questions to think about when you're choosing an approach:

Семантика данныхData semantic — Какова основная семантика хранилища данных и доступа к данным (хранятся ли реляционные или неструктурированные данные)?- What is the core data storage and data access semantic (are you storing relational or unstructured data)? Неструктурированные данные, такие как файлы мультимедиа, подходят для хранения BLOB-объектов; набор связанных данных, таких как продукты, запасы, поставщики, заказы клиентов и т. д., подходит для реляционной базы данных.Unstructured data such as media files fits best in blob storage; a collection of related data such as products, inventories, suppliers, customer orders, etc., fits best in a relational database.
Поддержка запросовQuery support Как просто запрашивать данные?- How easy is it to query the data? — Какие типы вопросов можно эффективно запрашивать?- What types of questions can be efficiently asked? Хранилища данных "ключ — значение" очень хороши при получении одной строки с заданным ключевым значением, но не настолько хорошо для сложных запросов.Key/value data stores are very good at getting a single row given a key value but not so good for complex queries. Для хранилища данных профиля пользователя, в котором вы всегда получаете данные для одного конкретного пользователя, хранилище данных "ключ — значение" может работать правильно. для каталога продуктов, в котором вы хотите получить различные группирования, основанные на различных атрибутах продукта, реляционная база данных может работать лучше.For a user profile data store where you are always getting the data for one particular user, a key/value data store could work well; for a product catalog where you want to get different groupings based on various product attributes a relational database might work better. Базы данных NoSQL могут эффективно хранить большие объемы данных, но необходимо структурировать базу данных так, как приложение запрашивает данные, и это затрудняет выполнение нерегламентированных запросов.NoSQL databases can store large volumes of data efficiently, but you have to structure the database around how the app queries the data, and this makes ad hoc queries harder to do. С помощью реляционной базы данных можно создавать запросы практически любого типа.With a relational database, you can build almost any kind of query.
Функциональная проекцияFunctional projection — Вопросы, агрегаты и т. д. могут выполняться на стороне сервера?- Can questions, aggregations, etc., be executed server-side? Если я выполняю SELECT COUNT (*) из таблицы в SQL, он очень эффективно выполняет всю работу на сервере и возвращает нужное число.If I run SELECT COUNT(*) from a table in SQL, it will very efficiently do all the work on the server and return the number I'm looking for. Если мне нужно то же вычисление из хранилища данных NoSQL, которое не поддерживает агрегирование, это неэффективный неограниченный запрос и, возможно, истечет время ожидания. Даже если запрос выполнен успешно, мне нужно получить все данные с сервера на клиент и подсчитать строки на клиенте.If I want the same calculation from a NoSQL data store that doesn't support aggregation, this is an inefficient "unbounded query" and will probably time out. Even if the query succeeds I have to retrieve all of the data from the server to the client and count the rows on the client. -Какие языки и типы выражений можно использовать?- What languages or types of expressions can be used? В реляционной базе данных я могу использовать SQL.With a relational database I can use SQL. В некоторых базах данных NoSQL, таких как хранилище таблиц Azure, я буду использовать OData, и все, что я могу сделать, — это фильтровать по первичному ключу и получать проекции (выберите подмножество доступных полей).With some NoSQL databases such as Azure Table storage, I'll be using OData, and all I can do is filter on primary key and get projections (select a subset of the available fields).
Простота масштабированияEase of scalability — Как часто и сколько необходимо масштабировать данные?- How often and how much will the data need to scale? — Платформа изначально реализует горизонтальное масштабирование?- Does the platform natively implement scale-out? Как просто добавить или удалить емкость (размер и пропускную способность)?- How easy is it to add/remove capacity (size and throughput)? Реляционные базы данных и таблицы не разделяются автоматически, чтобы сделать их масштабируемыми, поэтому их сложно масштабировать, чем некоторые ограничения.Relational databases and tables aren't automatically partitioned to make them scalable, so they are difficult to scale beyond certain limitations. NoSQL хранилища данных, такие как хранилище таблиц Azure, по сути секционированы все, и почти нет ограничений на добавление секций.NoSQL data stores like Azure Table storage inherently partition everything, and there is almost no limit to adding partitions. Вы можете легко масштабировать хранилище таблиц размером до 200 терабайт, но максимальный размер базы данных SQL Azure составляет 500 ГБ.You can readily scale Table Storage up to 200 terabytes, but the maximum database size for Azure SQL Database is 500 gigabytes. Реляционные данные можно масштабировать, разделяя их на несколько баз данных, но Настройка приложения для поддержки этой модели включает в себя множество программных работ.You can scale relational data by partitioning it into multiple databases, but setting up an application to support that model involves a lot of programming work.
Инструментирование и управляемостьInstrumentation and Manageability Насколько проста платформа для инструментирования, мониторинга и управления?- How easy is the platform to instrument, monitor, and manage? Вам нужно будет знать о работоспособности и производительности хранилища данных, чтобы вам было известно о том, какие метрики предоставляет платформа бесплатно и что необходимо для самостоятельной разработки.You will need to keep informed about the health and performance of your data store, so you need to know up front what metrics a platform gives you for free, and what you have to develop yourself.
ОперацииOperations Насколько проста платформа для развертывания и запуска в Azure?- How easy is the platform to deploy and run on Azure? PaaS?PaaS? IaaS?IaaS? Linux?Linux? Хранилище таблиц и база данных SQL легко настроить в Azure.Table Storage and SQL Database are easy to set up on Azure. Платформы, которые не являются встроенными решениями Azure PaaS, нуждаются в дополнительных усилиях.Platforms that aren't built-in Azure PaaS solutions require more effort.
Поддержка APIAPI Support — Это доступный API, который упрощает работу с платформой?- Is an API available that makes it easy to work with the platform? Для службы таблиц Azure существует пакет SDK с API .NET, поддерживающий модель асинхронного программирования .NET 4,5.For the Azure Table Service there's an SDK with a .NET API that supports the .NET 4.5 asynchronous programming model. При написании приложения .NET гораздо проще написать и протестировать код для службы таблиц Azure по сравнению с другой платформой хранилища данных "ключ-значение", не имеющей API или менее исчерпывающим.If you're writing a .NET app, it'll be much easier to write and test code for the Azure Table Service compared to another key/value column data store platform that has no API or a less comprehensive one.
Целостность транзакций и согласованность данныхTransactional integrity and data consistency — Очень важно, что платформа поддерживает транзакции, чтобы обеспечить согласованность данных?- Is it critical that the platform support transactions in order to guarantee data consistency? Для отслеживания объемов отправленных сообщений электронной почты производительность и низкая стоимость хранения данных могут быть более важными, чем автоматическая поддержка транзакций или ссылочной целостности в платформе данных, что делает службу таблиц Azure хорошим выбором.For keeping track of bulk emails sent, performance and low data storage cost might be more important than automatic support for transactions or referential integrity in the data platform, making the Azure Table Service a good choice. Для отслеживания балансов банковского счета или заказов на покупку платформа реляционной базы данных, обеспечивающая надежные гарантии транзакций, будет лучшим выбором.For tracking bank account balances or purchase orders a relational database platform that provides strong transactional guarantees would be a better choice.
Непрерывность бизнес-процессовBusiness continuity Что такое простота резервного копирования, восстановления и аварийного восстановления?- How easy are backup, restore, and disaster recovery? Более ранние или более поздние рабочие данные будут повреждены, и вам потребуется функция отмены.Sooner or later production data will get corrupted and you'll need an undo function. Реляционные базы данных часто имеют более детализированные возможности восстановления, например возможность восстановления на момент времени.Relational databases often have more fine-grained restore capabilities, such as the ability to restore to a point in time. Понимание возможностей восстановления, доступных на каждой рассматриваемой платформе, является важным фактором.Understanding what restore features are available in each platform you're considering is an important factor to consider.
СтоимостьCost — Если несколько платформ могут поддерживать рабочую нагрузку данных, как они сравниваются по затратам?- If more than one platform can support your data workload, how do they compare in cost? Например, при использовании ASP.NET Identity можно хранить данные профиля пользователя в службе таблиц Azure или в базе данных SQL Azure.For example, if you use ASP.NET Identity, you can store user profile data in Azure Table Service or Azure SQL Database. Если вам не нужны широкие возможности запросов к базе данных SQL, вы можете выбрать таблицы Azure в части, так как затраты на него гораздо меньше для определенного объема хранилища.If you don't need the rich querying facilities of SQL Database, you might choose Azure Tables in part because it costs much less for a given amount of storage.

Прежде чем выбирать решения для хранения данных, мы рекомендуем ознакомиться с ответами на вопросы в каждой из этих категорий.What we generally recommend is know the answer to the questions in each of these categories before you choose your data storage solutions.

Кроме того, у вашей рабочей нагрузки могут быть особые требования, которые некоторые платформы могут поддерживать лучше, чем другие.In addition, your workload might have specific requirements that some platforms can support better than others. Пример:For example:

  • Требуются ли приложению возможности аудита?Does your application require audit capabilities?
  • Каковы требования к долговременному объему данных — требуются ли вам возможности автоматической архивации или очистки?What are your data longevity requirements -- do you require automated archival or purging capabilities?
  • Требуются ли вам специализированные требования к безопасности?Do you have specialized security needs? Например, данные включают персональные данные (личные сведения), но необходимо убедиться, что PII исключены из результатов запроса.For example, the data includes PII (personally identifiable information) but you have to be able to make sure that PII is excluded from query results.
  • Если у вас есть данные, которые не могут храниться в облаке для нормативных или технологических причин, может потребоваться платформа облачного хранилища данных, которая упрощает интеграцию с локальным хранилищем.If you have some data that can't be stored in the cloud for regulatory or technological reasons, you might need a cloud data storage platform that facilitates integrating with your on-premises storage.

Демонстрация: использование базы данных SQL в AzureDemo – using SQL Database in Azure

Приложение для устранения проблем использует реляционную базу данных для хранения задач.The Fix It app uses a relational database to store tasks. Сценарий Windows PowerShell для создания среды, показанный в главе Автоматизация всех , создает два экземпляра базы данных SQL.The environment creation Windows PowerShell script shown in the Automate Everything chapter creates two SQL Database instances. Их можно увидеть на портале, щелкнув вкладку базы данных SQL .You can see these in the portal by clicking the SQL Databases tab.

Базы данных SQL на портале

Вы также можете легко создавать базы данных с помощью портала.It's also easy to create databases by using the portal.

Щелкните создать--службы данных -- базе данных SQL -- Быстрое создание, введите имя базы данных, выберите сервер, который уже есть в вашей учетной записи, или создайте новый, а затем щелкните создать базу данных SQL.Click New -- Data Services -- SQL Database -- Quick Create, enter a database name, choose a server you already have in your account or create a new one, and click Create SQL Database.

Новая база данных SQL

Подождите несколько секунд, и вы получите базу данных в Azure, которая будет готова к использованию.Wait several seconds, and you have a database in Azure ready for you to use.

Создана новая база данных SQL

Так что Azure выполняет через несколько секунд, что может занять день или неделю или больше времени для выполнения в локальной среде.So Azure does in a few seconds what it may take you a day or a week or longer to accomplish in the on-premises environment. И так как вы можете легко создавать базы данных автоматически в сценарии или с помощью API управления, можно динамически масштабировать их путем распространения данных между несколькими базами данных, если ваше приложение запрограммировано для этого.And since you can just as easily create databases automatically in a script or by using a management API, you can dynamically scale out by spreading your data across multiple databases, so long as your application has been programmed for that.

Вот пример нашей модели "платформа как услуга".This is an example of our Platform-as-a-Service model. Управлять серверами не требуется, мы делаем их.You don't have to manage the servers, we do it. Вам не нужно беспокоиться о резервных копиях.You don't have to worry about backups, we do it. Он работает в высокой доступности — данные в базе данных реплицируются на три сервера автоматически.It's running in high availability – the data in the database is replicated across three servers automatically. Если компьютер выходит из строя, автоматически выполняется отработка отказа, и данные не теряются.If a machine dies, we automatically fail over and you lose no data. Сервер постоянно обновляется, вам не нужно беспокоиться об этом.The server is patched regularly, you don't need to worry about that.

Нажмите кнопку, чтобы получить точную строку подключения и сразу же приступить к использованию новой базы данных.Click a button and you get the exact connection string you need and can immediately start using the new database.

Строки подключения

На панели мониторинга отображается журнал подключения и объем используемого хранилища.The Dashboard shows you connection history and amount of storage used.

Панель мониторинга базы данных SQL

Можно управлять базами данных на портале или с помощью SQL Server инструментов, с которыми вы уже знакомы, в том числе SQL Server Management Studio (SSMS) и Visual Studio Tools обозреватель объектов SQL Server (SSOX) и обозреватель сервера.You can manage databases in the portal or by using SQL Server tools you're already familiar with, including SQL Server Management Studio (SSMS) and the Visual Studio tools SQL Server Object Explorer (SSOX) and Server Explorer.

SSOX

Еще одна удобная вещь — модель ценообразования.Another nice thing is the pricing model. Вы можете начать разработку с бесплатной базы данных по 20 МБ, а Рабочая база данных начнется примерно $5 в месяц.You can start development with a free 20 MB database, and a production database starts at about $5 per month. Вы платите только за объем данных, которые фактически хранятся в базе данных, а не на максимальной емкости.You pay only for the amount of data you actually store in the database, not the maximum capacity. Вам не нужно покупать лицензию.You don't have to buy a license.

Базу данных SQL легко масштабировать.SQL Database is easy to scale. Для приложения, предназначенного для решения проблемы, база данных, созданная в нашем сценарии автоматизации, ограничена 1 ГБ.For the Fix It app, the database we create in our automation script is capped at 1 gig. Если вы хотите масштабировать его до 150 ГБ, можно просто перейти на портал и изменить этот параметр или выполнить REST APIную команду, а в секундах — базу данных 150, в которую можно развернуть данные.If you want to scale it up to 150 gig, you can just go into the portal and change that setting, or execute a REST API command, and in seconds you have a 150 gig database that you can deploy data into.

Выпуски и размеры базы данных SQL

Это сила облака, которая позволяет быстро и легко использовать инфраструктуру, и сразу же приступить к ее использованию.That's the power of the cloud to stand up infrastructure quickly and easily and start using it immediately.

Приложение для устранения проблем использует две базы данных SQL: одну для членства (проверка подлинности и авторизация) и одну для данных, и это все, что нужно сделать для ее предоставления и масштабирования.The Fix It app uses two SQL databases, one for membership (authentication and authorization) and one for data, and this is all you have to do to provision it and scale it. Вы ранее видели, как подготавливать базы данных с помощью сценариев Windows PowerShell, и теперь вы узнали, как легко сделать это на портале.You saw earlier how to provision the databases through Windows PowerShell scripts, and now you've also seen how easy it is to do in the portal.

Entity Framework и прямой доступ к базе данных с помощью ADO.NETEntity Framework versus direct database access using ADO.NET

Приложение для устранения проблем обращается к этим базам данных с помощью Entity Framework, рекомендуемого модуля ORM (объектно-реляционного модуля сопоставления) Майкрософт для приложений .NET.The Fix It app accesses these databases by using the Entity Framework, Microsoft's recommended ORM (object-relational mapper) for .NET applications. ORM — это отличное средство, которое упрощает работу разработчиков, но производительность в некоторых сценариях обусловлена снижением производительности.An ORM is a great tool that facilitates developer productivity, but productivity comes at the expense of degraded performance in some scenarios. В реальных облачных приложениях вы не будете выбирать между использованием EF или ADO.NET напрямую. Вы будете использовать оба этих компонента.In a real-world cloud app you won't be making a choice between using EF or using ADO.NET directly -- you'll use both. В большинстве случаев при написании кода, который работает с базой данных, получение максимальной производительности не является критическим, и вы можете воспользоваться преимуществами упрощенного программирования и тестирования, которые вы получаете с Entity Framework.Most of the time when you're writing code that works with the database, getting maximum performance is not critical and you can take advantage of the simplified coding and testing that you get with the Entity Framework. В ситуациях, когда накладные расходы EF приведут к неприемлемой производительности, вы можете писать и выполнять собственные запросы с помощью ADO.NET, в идеале, путем вызова хранимых процедур.In situations where the EF overhead would cause unacceptable performance, you can write and execute your own queries using ADO.NET, ideally by calling stored procedures.

Независимо от того, какой метод используется для доступа к базе данных, вы хотите максимально увеличить «беседу».Whatever method you use to access the database, you want to minimize "chattiness" as much as possible. Иными словами, если можно получить все необходимые данные в одном крупном наборе результатов запроса, а не десятках или сотнях меньших, это обычно предпочтительно.In other words, if you can get all the data you need in one larger query result set rather than dozens or hundreds of smaller ones, that's usually preferable. Например, если вам нужно перечислить учащихся и курсов, в которых они зарегистрированы, обычно лучше получить все данные в одном запросе на соединение, а не получать учащихся в одном запросе и выполнять отдельные запросы для курсов каждого учащегося.For example, if you need to list students and the courses they're enrolled in, it's usually better to get all of the data in one join query rather than getting the students in one query and executing separate queries for each student's courses.

Базы данных SQL и Entity Framework в приложении Fix ИТSQL databases and the Entity Framework in the Fix It app

В приложении Fix It класс FixItContext, производный от класса Entity Framework DbContext, определяет базу данных и указывает таблицы в базе данных.In the Fix It app the FixItContext class, which derives from the Entity Framework DbContext class, identifies the database and specifies the tables in the database. Контекст задает набор сущностей (таблицу) для задач, а код передается в контекст в качестве имени строки подключения.The context specifies an entity set (table) for tasks, and the code passes in to the context the connection string name. Это имя ссылается на строку подключения, определенную в файле Web. config.That name refers to a connection string that is defined in the Web.config file.

public class MyFixItContext : DbContext
{
    public MyFixItContext()
        : base("name=appdb")
    {
    }

    public DbSet<MyFixIt.Persistence.FixItTask> FixItTasks { get; set; }
}

Строка подключения в файле Web. config называется аппдб (здесь указывает на локальную базу данных разработки):The connection string in the Web.config file is named appdb (here pointing to the local development database):

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MyFixIt-20130604091232_4;Integrated Security=True" providerName="System.Data.SqlClient" />
    <add name="appdb" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=MyFixItContext-20130604091609_11;Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

Entity Framework создает таблицу фикситтаскс на основе свойств, включенных в FixItTask класс сущностей.The Entity Framework creates a FixItTasks table based on the properties included in the FixItTask entity class. Это простой класс POCO (простой старый объект CLR), который означает, что он не наследует от Entity Framework и не имеет никаких зависимостей от него.This is a simple POCO (Plain Old CLR Object) class, which means it doesn't inherit from or have any dependencies on the Entity Framework. Но Entity Framework известно, как создать таблицу на ее основе и выполнить операции CRUD (Create-Read-Update-Delete).But Entity Framework knows how to create a table based on it and execute CRUD (create-read-update-delete) operations with it.

public class FixItTask
{
    public int FixItTaskId  { get; set; }
    public string CreatedBy { get; set; }
    [Required]
    public string Owner     { get; set; }
    [Required]
    public string Title     { get; set; }
    public string Notes     { get; set; }
    public string PhotoUrl  { get; set; }
    public bool IsDone      { get; set; } 
}

Таблица Фикситтаскс

Приложение для устранения проблем включает в себя интерфейс репозитория, который используется для операций CRUD, работающих с хранилищем данных.The Fix It app includes a repository interface that it uses for CRUD operations working with the data store.

public interface IFixItTaskRepository
{
    Task<List<FixItTask>> FindOpenTasksByOwnerAsync(string userName);
    Task<List<FixItTask>> FindTasksByCreatorAsync(string userName); 

    Task<MyFixIt.Persistence.FixItTask> FindTaskByIdAsync(int id);

    Task CreateAsync(FixItTask taskToAdd);
    Task UpdateAsync(FixItTask taskToSave);
    Task DeleteAsync(int id);
}

Обратите внимание, что методы репозитория выполняются асинхронно, поэтому доступ к данным можно выполнять полностью асинхронно.Notice that the repository methods are all async, so all data access can be done in a completely asynchronous way.

Реализация репозитория вызывает Entity Framework асинхронные методы для работы с данными, включая запросы LINQ, а также операции вставки, обновления и удаления.The repository implementation calls Entity Framework async methods to work with the data, including LINQ queries as well as for insert, update, and delete operations. Ниже приведен пример кода для поиска решения задачи ИТ.Here's an example of the code for looking up a Fix It task.

public async Task<FixItTask> FindTaskByIdAsync(int id)
{
    FixItTask fixItTask = null;
    Stopwatch timespan = Stopwatch.StartNew();

    try
    {
        fixItTask = await db.FixItTasks.FindAsync(id);
        
        timespan.Stop();
        log.TraceApi("SQL Database", "FixItTaskRepository.FindTaskByIdAsync", timespan.Elapsed, "id={0}", id);
    }
    catch(Exception e)
    {
        log.Error(e, "Error in FixItTaskRepository.FindTaskByIdAsynx(id={0})", id);
    }

    return fixItTask;
}

Вы заметите, что здесь также есть несколько времени и кода регистрации ошибок. мы рассмотрим это позже в главе мониторинг и телеметрии.You'll notice there's also some timing and error logging code here, we'll look at that later in the Monitoring and Telemetry chapter.

Выбор базы данных SQL (PaaS) и SQL Server в виртуальной машине (IaaS) в AzureChoosing SQL Database (PaaS) versus SQL Server in a VM (IaaS) in Azure

Хорошая вещь о SQL Server и базе данных SQL Azure заключается в том, что основная модель программирования для обоих из них идентична.A nice thing about SQL Server and Azure SQL Database is that the core programming model for both of them is identical. Большинство этих навыков можно использовать в обеих средах.You can use most of the same skills in both environments. Вы даже можете использовать базу данных SQL Server в разработке и экземпляр базы данных SQL в облаке, что является настройкой приложения для исправления ИТ.You can even use a SQL Server database in development and a SQL Database instance in the cloud, which is how the Fix It app is set up.

В качестве альтернативы можно запустить ту же SQL Server в облаке, которое выполняется в локальной среде, установив его на виртуальных машинах IaaS.As an alternative, you can run the same SQL Server in the cloud that you run on-premises by installing it on IaaS VMs. Для некоторых устаревших приложений запуск SQL Server в виртуальной машине может быть лучшим решением.For some legacy applications, running SQL Server in a VM might be a better solution. Так как база данных SQL Server работает на выделенной виртуальной машине, ей предоставляется больше ресурсов, чем база данных SQL, которая работает на общем сервере.Because a SQL Server database runs on a dedicated VM, it has more resources available to it than a SQL Database database that runs on a shared server. Это означает, что база данных SQL Server может быть больше и работать хорошо.That means a SQL Server database can be larger and still perform well. Как правило, чем меньше размер базы данных, ни размер таблицы, тем лучше вариант использования базы данных SQL (PaaS).In general, the smaller the database size and table size, the better the use case works for SQL Database (PaaS).

Ниже приведены некоторые рекомендации по выбору между двумя моделями.Here are some guidelines on how to choose between the two models.

База данных SQL Azure (PaaS)Azure SQL Database (PaaS) SQL Server на виртуальной машине (IaaS)SQL Server in a Virtual Machine (IaaS)
Профессионалы — вам не нужно создавать виртуальные машины, обновлять или изменять операционные системы или SQL, а также управлять ими. Azure делает это самостоятельно.Pros - You don't have to create or manage VMs, update or patch OS or SQL; Azure does that for you. — Встроенная Высокая доступность с соглашением об уровне обслуживания уровня базы данных.- Built-in High Availability, with a database-level SLA. — Низкая совокупная стоимость владения (TCO), так как вы платите только за то, что используете (не требуется лицензия).- Low total cost of ownership (TCO) because you pay only for what you use (no license required). — Подходит для обработки большого количества небольших баз данных (<= 500 ГБ).- Good for handling large numbers of smaller databases (<=500 GB each). — Упрощается динамическое создание новых баз данных для обеспечения горизонтального масштабирования.- Easy to dynamically create new databases to enable scale-out. Возможности, совместимые с локальными SQL Server.Pros - Feature-compatible with on-premises SQL Server. — Может реализовать SQL Server высокий уровень доступности с помощью AlwaysOn в 2 и более виртуальных машинах с соглашением об уровне обслуживания на уровне виртуальной машины.- Can implement SQL Server High Availability via AlwaysOn in 2+ VMs, with VM-level SLA. — Вы полностью контролируете управление SQL.- You have complete control over how SQL is managed. — Может повторно использовать уже имеющиеся лицензии SQL или платить за один час.- Can re-use SQL licenses you already own, or pay by the hour for one. — Подходит для обработки меньшего числа баз данных, но более крупных (1 ТБ +).- Good for handling fewer but larger (1 TB+) databases.
Недостатки . Некоторые функции пропуска по сравнению с локальными SQL Server (отсутствие интеграции со средой CLR, TDE, Поддержка сжатия, SQL Server Reporting Servicesи т. д.) — ограничение размера базы данных 500 ГБ.Cons - Some feature gaps compared to on-premises SQL Server (lack of CLR integration, TDE, compression support, SQL Server Reporting Services, etc.) - Database size limit of 500GB. Недостатки — обновления и исправления (операционная система и SQL) — это ваша обязанность — создание и управление баз данных — это ваша ответственность за число операций ввода-вывода на диск (в секунду), ограниченный около 8000 (через 16 дисков данных).Cons - Updates/patches (OS and SQL) are your responsibility - Creation and management of DBs are your responsibility - Disk IOPS (input/output operations per second) limited to about 8000 (via 16 data drives).

Если вы хотите использовать SQL Server на виртуальной машине, можно использовать собственную лицензию SQL Server или оплатить ее за час.If you want to use SQL Server in a VM, you can use your own SQL Server license, or you can pay for one by the hour. Например, на портале или с помощью REST API можно создать новую виртуальную машину с помощью SQL Server образа.For example, in the portal or via the REST API you can create a new VM using a SQL Server image.

Создание виртуальной машины с SQL Server

Список SQL Server образов виртуальных машин

При создании виртуальной машины с SQL Server образом мы будем оценивать стоимость SQL Server лицензий на час на основе использования виртуальной машины.When you create a VM with a SQL Server image, we pro-rate the SQL Server license cost by the hour based on your usage of the VM. Если у вас есть проект, который будет работать только в течение нескольких месяцев, это дешевле, чем платить за час.If you have a project that's only going to run for a couple of months, it's cheaper to pay by the hour. Если вы считаете, что проект будет работать в течение нескольких лет, дешевле приобретать лицензию в обычном порядке.If you think your project is going to last for years, it's cheaper to buy the license the way you normally do.

СводкаSummary

Облачные вычисления позволяют эффективно смешивать и сопоставлять подходы к хранению данных в соответствии с потребностями вашего приложения.Cloud computing makes it practical to mix and match data storage approaches to best fit the needs of your application. Если вы создаете новое приложение, тщательно продумайте указанные здесь вопросы, чтобы выбрать подходы, которые будут продолжать работать при расширении приложения.If you're building a new application, think carefully about the questions listed here in order to pick approaches that will continue to work well when your application grows. В следующей главе рассматриваются некоторые стратегии секционирования, которые можно использовать для объединения нескольких подходов к хранению данных.The next chapter will explain some partitioning strategies that you can use to combine multiple data storage approaches.

РесурсыResources

Для получения дополнительных сведений см. следующие ресурсы.For more information, see the following resources.

Выбор платформы базы данных:Choosing a database platform:

Выбор между SQL Server и базой данных SQL:Choosing between SQL Server and SQL Database:

Использование Entity Framework и базы данных SQL в веб-приложении ASP.NETUsing Entity Framework and SQL Database in an ASP.NET Web app

Использование MongoDB в Azure:Using MongoDB on Azure:

HDInsight (Hadoop в Azure):HDInsight (Hadoop on Azure):