Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:

SQL СЕ представляет собой подмножество функциональных возможностей версий базы данных SQL Server, ориентированных на настольные компьютеры и серверы. SQL СЕ поддерживает хранение реляционных данных в таблицах, а также значительную часть типов данных SQL и синтаксиса запросов для добавления, извлечения и изменения данных. Следует подчеркнуть, что в настоящее время SQL СЕ не поддерживает сохраненные процедуры или именованные параметры в запросах.

Другие базы данных для мобильных устройств и модели лицензирования баз данных

Следует отметить, что устанавливаемые на устройствах базы данных, которые могут выполняться и на мобильных устройствах, выпускаются и другими поставщиками программного обеспечения. С концептуальной точки зрения они аналогичны SQL СЕ, но у каждой из них есть свои сильные и слабые стороны в отношении возможностей синхронизации данных, разнообразия функциональных средств и модели ценообразования. Важной характеристикой SQL СЕ является то, что ее можно свободно использовать и распространять вместе со своим приложением без необходимости получения на это специальной лицензии или выплат авторских отчислений. Для синхронизации с SQL- серверами требуется наличие специальной лицензии клиента SQL, точно так же, соответствующая клиентская лицензия требуется и для подключения настольного приложения непосредственно к SQL-серверу.

Исторически так сложилось, что компания Microsoft ранее выпустила еще одну базу данных для мобильных устройств, которая называлась CEDB (Windows СЕ Database). Эта база данных имеет ограниченные функциональные возможности, и ее использование в новых приложениях не рекомендуется; на будущих устройствах база данных CEDB может отсутствовать. Поскольку эта технология почти полностью устарела, никакого непосредственного механизма для доступа к этой базе данных в .NET Compact Framework не предусмотрено. Если вашему приложению требуется доступ к CEDB, вы должны вызывать встроенный код или использовать интерфейсные классы .NET, созданные сторонними производителями. Имеются две неплохие альтернативы использованию CEDB: для сравнительно небольших объемов данных можно использовать XML-файлы, тогда как для крупных объемов данных наилучшим выбором будет SQL СЕ.

Независимый и синхронизированный режимы работы базы данных SQL СЕ.

SQL СЕ может использоваться в одном из трех режимов:

1. Автономный режим. В этой модели использования база данных SQL СЕ служит в качестве автономной базы данных на устройстве. Аналогом этого на настольном компьютере является использование локальных процессоров баз данных SQL Server или Access для управления локальной базой данных. Одна из основных трудностей при использовании автономной базы данных SQL СЕ заключается в выборе правильной стратегии наполнения базы данных. Ваше приложение может либо динамически заполнять базу данных внешними данными, получаемыми устройством во время выполнения, либо использовать готовый файл базы данных, копируемый на устройство. Возможно и сочетание указанных моделей; данные могут динамически добавляться в существующий файл базы данных, который был загружен на устройство. Какая стратегия заполнения базы данных является наилучшей, зависит от природы вашего приложения. Если вы используете предварительно заполненную базу данных, то самый простой способ доставки этих данных заключается в создании эталонной копии базы данных на Pocket PC как части вашего процесса разработки и последующего копирования этой базы данных с устройства на машину, которая используется для осуществления разработки. Такая предварительно заполненная база данных может далее быть скопирована на все целевые устройства в процессе развертывания приложения.

2. Синхронизация с SQL-сервером через Web-cepвep (IIS). Этот механизм известен под названием удаленного доступа к данным (remote data access — RDA). Он представляет собой простой метод синхронизации, в соответствии с которым SQL- сервер, содержащий эталонную копию данных, никак специально не связан с базами данных SQL СЕ, которые с ним синхронизируются. Базы данных SQL СЕ получают доступ к серверным данным точно так же, как любое другое клиентское приложение базы данных, за исключением того, что доступ осуществляется через интерфейс Web-cepвepa. Поскольку серверная база данных не должна отслеживать, какие данные хранятся синхронизированными SQL СЕ-клиентами, стратегия RDA характеризуется низкими накладными расходами на сервере и хорошо масштабируется. Подобным образом с основным SQL-сервером может синхронизироваться неограниченное количество устройств с локальными базами данных SQL СЕ. Синхронизация данных реализуется с помощью специального механизма синхронизации SQL СЕ, который выполняется поверх Windows Internet Information Server (Web-сервер). Поскольку синхронизация основывается на Web-сервере, она при необходимости может осуществляться через общедоступную сеть. SQL-серверу ничего не известно о том, что клиентские базы данных должны синхронизироваться с его данными, поэтому ответственность за то, чтобы данные своевременно обновлялись на клиенте и сервере, лежит на мобильном приложении. Для получения более подробной информации относительно RDA прочитайте раздел справки "Using Remote Data Access" в материалах Microsoft "SQL Server СЕ Books Online"; эта документация поставляется как часть Visual Studio .NET (2003 или более поздняя версия). Резюмируя: RDA — суть низкие накладные расходы и отличная масштабируемость, но это дается за счет того, что данные приходится обновлять вручную. RDA — это прекрасный выбор в тех случаях, когда данные, которые должны синхронизироваться, главным образом используются только для чтения.

3. Синхронизация непосредственно с SQL-сервером. Этот механизм известен под названием репликации слиянием.

При репликации слиянием между локальной базой данных SQL СЕ устройства и SQL-сервером, с которым она синхронизируется, устанавливаются партнерские отношения. Это — мощная модель, поскольку SQL-cepверу доподлинно известно, какие данные хранятся в каждой партнерской клиентской базе данных SQL СЕ; обновление данных, как на устройстве, так и на сервере, может осуществляться гораздо более автоматизированным и систематическим образом, нежели в случае синхронизации посредством RDA. Поскольку SQL-сервер должен сохранять информацию о каждом партнерском SQL CE- клиенте, эта модель масштабируется хуже, чем модель RDA; поддержка огромного количества клиентов будет ложиться тяжким бременем на сервер. Независимо от этого, если требуется обеспечить наиболее надежную синхронизацию, данный выбор великолепно для этого подойдет. Для получения более подробной информации относительно репликации данных слиянием прочтите раздел "Using Replication" в материалах Microsoft "SQL Server СЕ Books Online".

Использование базы данных SQL СЕ несколькими приложениями

В настоящее время SQL СЕ обеспечивает одновременную поддержку только одного соединения с любой отдельной базой данных. Это правило действует как внутри приложения, так и вне его. Каждая база данных хранится в отдельном файле; эти файлы нельзя открыть одновременно, используя SQL СЕ. Это означает, что хотя на одном и том же устройстве могут быть открыты одновременно несколько баз данных, любая конкретная база данных в любой момент времени может иметь только одно соединение. Если приложение пытается открыть файл базы данных SQL СЕ, который ранее уже был открыт другим или этим же приложением, то процессор базы данных сгенерирует исключение, и второе соединение установлено не будет.

Если ваше приложение использует базу данных, которая не должна разделяться с другими приложениями, вам достаточно лишь убедиться в том, что ваш код не пытается установить одновременно более одного соединения с базой данных; соединением с базой данных следует управлять как глобальным ресурсом. Если ваше приложение работает с базой данных SQL СЕ, которая может использоваться совместно с другими мобильными приложениями, то вы должны учесть в своем проекте приложения два дополнительных момента:

1. Вы должны убедиться в том, что ваше мобильное приложение не удерживает открытым соединение с базой данных в течение большего времени, чем это крайне необходимо. Соединение следует устанавливать непосредственно перед тем, как возникнет потребность в доступе к базе данных, и по возможности освобождать сразу же после осуществления доступа к данным. Приложение должно проектироваться так, чтобы ему не требовался постоянный доступ к базе данных.

2. Вы должны предусматривать в коде защитные меры и быть готовыми к тому, что при любой попытке обращения к базе данных она уже могла быть до этого открыта. В вашем приложении должна быть предусмотрена модель, которая обеспечивает уведомление пользователя о том, что в настоящее время база данных уже используется другим локальным приложением, чтобы пользователь мог предпринять меры к закрытию другого приложения или вынудить его освободить соединение. Кроме того, в вашем мобильном приложении должна быть предусмотрена модель, позволяющая отложить доступ к базе данных на более поздний срок, когда установление соединения станет возможным; приложение не должно тормозиться из-за того, что не может подключиться к базе данных.

База данных SQL СЕ доступна не на всех типах устройств

Важно знать, что в настоящее время база данных SQL СЕ недоступна на смартфонах. Это связано с ограниченностью возможностей этих устройств в отношении, главным образом, размера базы данных, объема требуемой памяти и механизмов хранения данных. На устройствах Pocket PC имеются файловые системы на основе ОЗУ с питанием от батарей, обеспечивающие возможность быстрого доступа к файлам; смартфоны характеризуются тем, что для нужд долговременного хранения информации используется флэш-память, а объем рабочего ОЗУ небольшой, и оба эти фактора делают выполнение процессора базы на данном типе устройств менее желательным.

В случае создания вами двух отдельных версий приложения, одна из которых предназначена для Pocket PC, а вторая — для смартфонов, вам придется продумать два варианта проектных решений. Приложение для смартфонов должно удовлетворять другим требованиям в отношении пользовательского интерфейса по сравнению с приложением для Pocket PC и располагает совершенно иными возможностями в отношении хранения данных. В случае приложений для смартфонов объем данных, хранимых в долговременном хранилище, обычно будет меньше, чем в случае приложений для Pocket PC. Приемлемым вариантом может служить использование SQL СЕ на устройствах Pocket PC и XML-файлов на смартфонах.

Visual Studio .NET 2005 и SQL СЕ

В следующей версии SQL СЕ и .NET Compact Framework будет предложено два существенных усовершенствования, касающихся доступа к данным при работе с SQL СЕ.

1. Класс SqlCeResultSet даст разработчикам возможность перемещаться по данным и обновлять их непосредственно в базе данных SQL СЕ. Это упростит создание приложений, которые работают с базами данных вплотную, а не используют высокоуровневые абстракции наподобие объектов ADO.NET DataSet.

2. SQL СЕ будет поддерживать многопользовательский доступ. Это означает, что несколько приложений на одном устройстве смогут одновременно открывать одни и те же базы данных и работать с ними. Благодаря этому устранятся некоторые из описанных выше проблем, связанных с параллельным доступом к базам данных на устройстве.

Даст что-либо введение этих новых функциональных возможностей вам и вашему приложению? Ответ звучит так: "Возможно". Многие разработчики мобильных приложений выбирают в качестве целевых такие устройства, в ПЗУ которых уже содержатся необходимые среды выполнения, поскольку это упрощает развертывание приложения. (Для некоторых устройств такая возможность является единственной, но это уже тема следующей главы.) Если речь идет о таких приложениях, то должно пройти некоторое время, пока не наберется некоторое критическое количество устройств, ПЗУ которых содержат обновленные компоненты. Однако если у вас есть возможность установить обновленную среду выполнения и процессор базы данных, то это стоит сделать хотя бы ради того, чтобы иметь эти средства.

Резюме

Как и в случае задач повышения производительности, управления памятью и построения пользовательского интерфейса, создание удачной модели данных для мобильного приложения требует одновременно и планомерного подхода, и экспериментирования. Хорошая новость состоит в том, что многое из вашего опыта организации доступа к данным на настольных компьютерах вы сможете использовать при проектировании кода для доступа к данным в мобильных приложениях. Плохой же новостью является то, что вы сможете непосредственно использовать лишь небольшую часть уже имеющегося кода для настольных компьютеров, а для создания замечательных мобильных приложений вам придется учитывать специфику мобильных устройств.

Поделиться с друзьями: