英语原文共 18 页,剩余内容已隐藏,支付完成后下载完整资料
用于移动应用程序的NoSQL和SQL数据库
案例研究:MongoDB与PostgreSQL
- 引言
“移动世界”是当今信息技术最具活力的领域之一。智能手机和平板电脑的爆炸式增长为移动应用程序创造了一个巨大的市场。因此,对移动应用程序开发人员的需求越来越大,因此,即使只考虑罗马尼亚的情况,也出版了许多书籍[1][2][3]和文章(如[4]、[5]、[6]等)。此外,许多商业信息系统/商业信息学的本科和硕士课程都在他们的课程中引入了与移动设备和应用相关的课程(例如http://dice.ase.ro/?page_id = 31日,http://ism.ase.ro/curriculum_2012_2014.jsp, http://www.feaa.uaic.ro/ro/main/page/335, http://www.econ.ubbcluj.ro/planuri_invatamant/master/planuri_master_2012_2013/E-Business.pdf)。
几乎所有的移动应用程序都需要一个持久的数据层,包括查询选项。因此,数据库专业人员、学者和研究人员对移动技术的兴趣越来越大。Mahmoud等人[7]甚至建议在数据库课程中包括移动存储主题、设备和应用程序。
本文介绍了在移动应用程序中部署数据层的技术和工具。第2节讨论了移动软件在存储和数据库方面的一些具体要求。第三部分深入讨论了主要移动平台的数据存储特性。第4节讨论了NoSQL解决方案的参数,包括在MongoDB中实现的移动云解决方案的基本描述。第5、6和7节分析了SQL (PostgreSQL方言)和MongoDB在数据库模式、数据定义语言(DDL)、数据操作语言(DML)和数据库查询方面的一些主要差异。
- 移动应用程序存储层的常见问题
移动应用程序共享“经典”客户机/服务器或web多层应用程序体系结构的许多特性。图1描述了用于企业移动应用程序开发的一个经典的六层(安全层覆盖了所有其他五层)框架[8]。
持久性层在存储、DDL、DML和数据库查询方面有类似的要求。此外,来自应用程序层的数据访问机制与其他web应用程序类似。
移动应用程序和web应用程序数据库之间最显著的区别在于,虽然服务器持久性层相似,但移动应用程序的客户机平台(主要运行在智能手机和平板电脑上)的可用资源(内存、处理能力)规模较小。许多移动应用程序需要复制和同步机制,以便在智能手机上持久保存数据,并在服务器[9][10]上提供集中式大型数据库。客户端数据存储必须在没有硬盘技术[11][12]的情况下进行处理。
Nori[13]确定了移动和嵌入式dbms必须提供的11个特性,部分或全部提供:
a.可嵌入应用程序——有时不需要管理。
b.占用空间小——以便在更广泛的移动设备上下载
c.在移动设备上运行,在处理器功耗、RAM和永久内存都很小的情况下运行。
d.组件化DBMS——支持所有DBMS功能,只支持特定应用程序所需的功能。
e.自我管理的数据库管理系统,不希望用户是一个DBA谁能恢复崩溃的数据库。
f.内存中的DBMS——需要特殊的查询处理和索引技术,这些技术是为主内存的使用而优化的。
g.部署非常简单的便携式数据库。
h.数据库中没有防止病毒和恶意软件的代码。
i.与后端数据源同步。
j.远程管理——特别是在企业范围的应用程序中。
k.为专门的以数据为中心的应用程序定制编程接口。
Mahmoud等人[7]指出了移动应用程序中最常见的存储软件选项:
HTML5 (localStorage API将对象存储为键值对,IndexDB实现关系技术)
SQLLite – 过于简化的关系数据库服务器
云存储 (Apple iCloud, Dropbox, Google Drive, 等);
设备具体的存储 (api、工具、框架,如WebWorks、共享首选项、网络IO、WebView、Core Data).
下一节将深入讨论每个主要移动平台的数据存储特性。
- 一些主要移动平台上的数据层选项,从本地到云
微软(Microsoft)和黑莓(Blackberry)正在努力争取更多用户,它们分别更新了Windows Phone 8和黑莓(Blackberry) OS 10操作系统。但由谷歌和苹果生产的Android和iOS仍然领先,2012年的市场份额总和超过87%。当客户决定时,不仅操作系统所提供的功能是重要的,而且硬件特性、市场上可用的应用程序、社会地位、耐用性等也是重要的。
大多数为移动设备开发的应用程序需要用户数据、会话数据、生命周期时间戳的存储选项(特别是对于状态la pause或suspend)。存储需求可以从用户特定的选项(尺寸、用户帐户等的简单值)到传感器收集的大量数据(用户自己从internet或internet接收的数据)。
使用Android时,有几个保存数据的选项。其中,共享首选项基于键值对机制,仅适用于基本数据类型,受当前用户会话的限制。开发人员可以使用SDK检索、添加、删除和修改与当前活动相关的首选项,或者在同一用户会话的多个活动之间共享首选项。对于这两种变体,都提供了一个公共接口android. cono -tent。SharedPreferences包含另外两个嵌套类,一个作为当前键值对的编辑器,另一个作为更改首选项和相关回调的侦听器。其他公共方法与获取名称和值(不同数据类型)的映射以及原始数据类型的getter和setter相关。除了共享首选项之外,任何具有正确权限的应用程序都可以从内部存储访问文件系统。
默认情况下,安卓系统限制了文件访问应用程序创建他们(MODE_PRIVATE),但这种行为可以修改为:MODE_WORLD_READABLE为了让其他应用程序或用户阅读创建或修改文件(弃用API级别以来17),MODE_WORLD_WRITEABLE开放写访问他人(也开始弃用API级别17)最后MODE_APPEND限制未来用户在文件的末尾添加数据。用于写和读的类在API中可用,如FileOutputStream和FileInputStream,它们与openFileOutput()和openFileInput()等公共方法相关联。也可以使用读、写和关闭方法。此外,开发人员还可以利用内置功能获取特定文件的路径、管理目录、删除文件和从特定文件夹检索文件列表。
此外,对于原始资源(在设计时添加,在编译时可用)和保存缓存文件(不推荐用于敏感数据),也存在一些方法。管理持久数据的另一种方法是使用外部存储、固定(内部不可移动分区)或可移动(SD、microSD卡、通过micro-USB端口连接的设备)。外部存储的一个基本特性是所有应用程序都可以访问它。此外,建议特别注意,因为用户可以随时断开外部设备(开发人员必须通过SDK提供的特定方法检查媒体可用性)。几乎使用相同的文件和目录相关功能,其中音乐、播客、铃声、警报、图片等专用位置是由系统预先定义的,因为api级别8(都包含在公共类环境中——android.os.Environment)。
对于内部存储,系统维护一个策略,即在卸载应用程序时删除应用程序的所有相关文件。除非应用程序通过调用getExternalFilesDir()方法创建用于私有用途的文件,否则该策略不会应用于外部存储。当然,上面介绍的所有方法都可以用于结构化数据,因为在查询数据和获取聚合报告时,会出现一对值甚至本地存储的XML问题。
在其他数据层选项中,最受欢迎的SQLite被其生产者宣传为实现自包含、无服务器、零配置的事务性SQL数据库引擎的软件库。事实上,SQLite是存在于各种设备和操作系统上的,预编译的软件包可以下载用于Linux、Mac OS、Windows、Windows Phone 8、Windows . net平台[7]、[5][3]。它的流行可以用[3]的以下特性来解释:
易于安装和配置
简单
不需要服务器 (能在仅客户端的模式中运行)
密实度的数据库 (所有数据库为每个应用驻留在一个单独的文件中)
它是一个开源的产品.
由于如此紧凑,SQLite几乎可以移植到任何设备上,社区可以获得源代码。Android为SQLite提供了完整的支持库。由于每个数据库都驻留在磁盘上自己的文件中,并且由应用程序直接管理(不涉及服务器进程,如果名称已知,所有类都可以使用一个数据库),因此不能在多个应用程序之间直接共享。这个小内存占用库可以处理DML和DDL语句,提供对客户端、索引、多种数据类型、主键和外键的游标访问,以及许多其他特性,这使得它非常容易使用,是用作持久性层的一个很好的候选对象。
为iPhone或iPad等iOS设备编写的应用程序有几个存储选项,其中一些类似于上面为Android提供的存储选项,另一些则是针对主机OS的。其中可以找到文件(文本、逗号分隔值、XML、JSON)、属性列表、core data、用户首选项、SQLite。由于SQLite在这两种移动操作系统上都具有几乎相同的功能,并且文件是由类似的机制管理的,所以我们只简要描述苹果设备的其他选项。
属性列表用于iOS和MacOS上的应用程序,以便将原始数据类型或容器的简单层次结构存储为数组或字典。根据开发人员的需要,这些数据类型可以嵌套在多个级别。正如苹果官方文档中提到的,对于少量数据,建议使用属性列表。存储在属性列表中的数据可以序列化,以便将来使用二进制或XML格式。 Eckermann[14]发现这些列表易于使用,特别是由于定义良好的objective - c API,但另一方面,国家,他们不适合任何类型的关系数据,不能处理大型对象集,使用低效的内存加载机制,让开发人员处理太多的责任数据完整性和操纵。
为了帮助开发人员使用模式视图控制器模式,Cocoa框架通过一个名为Core data的特性帮助iOS开发人员更容易地定义数据模型。通过使用这种机制,开发人员可以访问能够处理数据模型的定义和集成的数据管理解决方案。Core Data提供了一个可视化的界面,直观,易用。
数据模型与应用程序的控制器通信,并将细节作为存储和SQL查询隐藏给开发人员(尽管这会导致缺乏对数据的控制)。这个存储框架可以序列化XML文件上的数据,包括二进制文件或直接到SQLite数据库。在内部,它在对象图中组织数据,并提供用于声明不同数据集合之间关系的特性。主要优点之一是,它是专门为iOS构建的解决方案,并且与苹果生态系统中的其他组件或工具集成良好,减少了持久性所需的代码量。“用户默认”存储环境可以方便地用于保存与应用程序或系统相关的用户设置和选项。它的构建不是为了帮助开发人员存储大量数据或任何结构化组织中的数据。
iOS的SQLite可以直接用作C库,或者使用Objective-C包装器作为FMDB、ArchDBObjects、SQLiteManager或SQLite持久对象。与Android类似,开发人员必须处理每个SQLite数据库所需的单个文件,用作种子。
除了上面列出的用于Android和iOS本地存储数据的选项之外,还有几个其他选项可以通过专用驱动程序跨网络访问数据库服务器,其中大多数驱动程序是由社区创建的。在过去的几年里,云数据库在开发者中越来越受欢迎,它们似乎是移动设备的重要选择。这些类型的服务是由重要的参与者提供的,比如Amazon及其S3或关系服务、Microsoft与Azure、Salesforce与Database.com,还有更多例子。
与下一节的主题相关,有一些专门从事NoSQL服务的云数据库提供者,它们使用MongoDB作为底层服务。最受欢迎的是mongoab、MongoHQ、Rackspace云或dotCloud。这些类型的服务首先的特征是缺少像安装或配置软件这样的阶段来涉及客户端。客户为所有这些服务付费,包括数据访问、存储空间、网络流量、监控程序和必要时的专门干预。供应商必须就基础设施维护、服务质量、响应时间等问题向服务级别协议投诉。
云中的大多数数据库服务都为客户机公开polyglot接口,同时提供SQL和NoSQL数据存储引擎。对于移动应用程序开发人员来说,在云计算中使用数据库服务可能是一个巨大的挑战,但另一方面也可能带来显著的优势。值得提到的是,该设备(有限的计算资源)可以分配更多的处理能力应用程序,由最终用户更多的欣赏,避免复制问题,需要昂贵的硬件(我们在2013年设备运行Android 8处理器核心-看到三星S4和其他新设备)。当然,网络连接的持续需求(通过Wi-Fi或数据计划)、电池消耗或数据库服务消耗的价格等问题也会出现。您可以考虑其他优点,比如对桌面应用程序和移动应用程序使用相同的持久性技术、服务提供商已经定义的备份和恢复计划和过程、根据业务需求扩展或缩小存储和访问容量的能力,以及其他优点。
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[18790],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。