OEA 2.11 支持单机版数据库 - SQLite与SQLCE对比

在 OEA 平台 设计中,需要支持多种数据库,这至少包括了 SqlServer、Oracle、一个单机文件数据库。而之前对于这一块,我们一直没有实现,只是预留了许多接口。昨天花费了一天的时间,让 OEA 支持了本地数据库 SQLCE。

 

为什么要支持本地数据库呢?


  1. 支持开发简单的本地软件。 
    偶尔需要一些比较小的应用程序,例如“个人计帐管理”、“个人联系方式管理”等。这些简单的软件,如果还让客户装个 SQLServer2008,客户觉得都围绕着。选择使用单机数据库,会让发布变得十分简单、体积也小,做好的程序,打个包发给客户就行了。(当然了,.NET 4.0 还是要装的。) 
    也就是说,用户可以面向个人。
  2. 支持单机试用。 
    在开发管理产品时,往往需要把产品给一些客户试用。不用装 SQLServer 的单机版,使得这些客户能够十分简单地试用我们的产品。

 

OEA 如何支持单机版



在使用 OEA 进行开发的过程中,不论是单机版、C/S 版还是B/S 版,它们的界面层以下的代码都是一样的,包括服务层、实体层、数据层等。而 单机版 和 C/S 版本的界面也是完全重用。所以,在开发完成之后,只需要把数据库连接的配置改变为单机数据库连接就可以了,如下图:

配置完成后,运行程序,即在输出目录下建立了 Data 文件夹,并自动生成对应实体的数据库:

这是进销存实例生成的对应的库:

有兴趣的朋友可以在 OEA 2.9 平台发布 中对应的开源地址,使用 SVN 下载最新的源码即可直接运行。(首次启动时,要生成数据库,会需要半分钟左右。)

 

 

OEA中单机数据库选型 SQLite vs SQLCE 



既然要使用单机版数据库,那么选择什么数据库比较好呢?目前,业界普遍使用的单机数据库主要还是 SQLite、Access 和 SQLCE。用得比较多的还是 SQLite,性能也很好,这个应该是 OEA 的首选。SQLCE 在老的版本中主要用于嵌入式开发,在桌面端应用得也少。Access 现在用的人越来越少了,而且连接起来比较费劲,这个在 OEA 中就不考虑了。

 

接下来,我对 SQLite 进行了一些测试。

主要还是测试这个数据库和 OEA 目前的设计是否有较多的冲突。结果发现果然是太不一样了。首先,OEA 平台的 AutoDb 模块会完全管理数据库,以达到开发人员在平时的开发中忽略数据库的存在。也就是说,这个模块会完成对数据库结构的建立、修改;数据的升级等。可是查了许多关于 SQLLite 的资料,最后得到的结论是:SQLLite 不支持 删除字段,修改字段。其中,还得查询 SQLLite 的数据库结构信息,以支持数据库差异升级,这在 SQLite 中也支持得很有限,只有从一个 sqlite_master 表中查询到数据表的建库SQL,拿出来还得自己解析。其次,在 SQLite 中,外键约束可以被创建,但是却不会被检查。引用完整性都没法保证,查询速度再快有时也没用。而且,象级联删除这类比较普遍的需求也不支持,都需要编写触发器完成,虽然 AutoDb 可以自动编写,但是总感觉太费事了。而 OEA 中聚合对象的删除,目前的设计是在根对象上删除后,自动级联删除整个聚合树,要改的话比较麻烦,所以这一点还是冲突。最后,在界面管理器方面,SQLite 用的主要第三方的软件,有很多,试用了一下,就感觉 SQLiteMgr 还不错,不过用起来并不顺手。

 

痛苦之余,我再对 SQLCE 进行了研究。

其实目前的 OEA 中已经有使用到 SQLCE 3.5,实现了客户端缓存(详见:OEA中的缓存模块设计)。虽然 SQLCE 3.5 并不支持并发,但是在客户端缓存中没有这个问题。另外,虽然 AutoDB 自动生成并升级数据库,但是在做业务开发的时候,总是要经常去数据库中查询数据。但是 SQLCE 3.5 麻烦的地方就在于没有一个好的界面管理器,不管是 VisualStudio 中集成的功能、还是 SqlServer Management Studio,都不方便使用。这样的话,平时操作起来就会非常麻烦,何谈开发效率。

鉴于此,我又查找了一些最新的 SQLCE 4.0 的资料。比较幸运的是,SQLCE 4.0 现在已经支持并发了,在 Web Matrix 开发 Web 网站时,默认都是使用 SQLCE 4.0 来做数据存储的。而且,它还提供了比较好的界面管理器:SqlCeToolbox,前两天才发布了最新版本,非常好用。(另外,这篇文章中讲了如何使用 SQLCE 开发,还给了 VS 的插件。)其次,SQLCE 4.0中的数据可以无缝地迁移到 SQLServer、SQLAzure 中,这也是非常棒的特性。最后,也是非常重要的,在数据库设计方面,SQLCE 4 基本上和 SQLServer 是保持一致的,支持 主键、外键、自增列、级联删除等。这就使得 我们在 OEA 上,不论是 AutoDB 还是 ORM,支持 SQLCE 都变得比较容易。

有的朋友会说,性能方面,SQLite 可比 SQLCE 快很多。但是其实我个人感觉 SQLCE 的速度也不慢,数据量不是非常大的情况下,应该没有问题。

 

最后总结一下二者的对比:

 

 

最终,经过一天的时间,OEA 成功支持单机数据库。还好有 SQLCE 4,要不就太费劲了!

时间: 2024-08-05 00:22:38

OEA 2.11 支持单机版数据库 - SQLite与SQLCE对比的相关文章

《OpenGL ES 3.x游戏开发(上卷)》一2.3 手机自带数据库——SQLite

2.3 手机自带数据库--SQLite 上一节介绍了如何使用Preferences存储简单数据,而复杂的数据就需要存储到文件或数据库中了.Android自带了一款轻量级的关系数据库--SQLite,其具有体积小,功能强大等特点,成为嵌入式设备首选的数据库系统.本节将带领读者走进SQLite的世界,学习如何应用SQLite数据库进行数据的增.删.改.查等基本操作. 2.3.1 初识SQLite SQLite是一款满足ACID特性的具有完备功能的关系数据库系统,由于其设计目标为轻量级.开源.支持嵌入

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.3节手机自带数据库——SQLite

2.3 手机自带数据库--SQLiteAndroid 3D游戏开发技术宝典--OpenGL ES 2.0上一节介绍了如何使用Preferences存储简单数据,而复杂的数据就需要存储到文件或数据库中了. Android自带了一款轻量级的关系数据库--SQLite,其具有体积小,功能强大等诸多特点,成为嵌入式设备首选的数据库系统.本节将带领读者走进SQLite的世界,去学习如何应用SQLite数据库进行数据的增.删.改.查等基本操作. 2.3.1 初识SQLiteSQLite是一款满足ACID特性

通用权限管理工具,支所有ADO(包括ODBC)支持的数据库,不管用什么编程都行,VC/BCB/VB/PB/Delphi

ado|odbc|编程|数据|数据库 下面是一部分说明: 请细请到这里下载ExeDemo测试版通用权限管理工具的创作动机权限管理是MIS软件中很重要的一环.很多国内较出名的MIS软件厂商都设计了较完善的也具有自己特色的权限管理模块.但对于很多没那么规范的软件商(包括个人或小创作团体),他们经常是接到一单,设计一套权限管理系统,每套都不同:有的则不够重视,随便写上一段,哪里都拷过去用:有的也曾费尽心机,但结果总不能令自己满意.其实仔细想一下,每套软件的权限虽然各不相同,但其实所需实现的功能是相同的

轻型数据库SQLite结合PHP的开发

数据|数据库 SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java等,还有ODBC接口,同样比起Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快. SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它

[VSTS] 让ADO.NET Entity Framework支持Oracle数据库

近期由于项目所需不得不研究Oracle数据库,回想上一次用Oracle还是07年的事情,实习时候做华晨宝马的项目简单接触了Oracle.这次的项目需要基于.NET平台,我个人的习惯是能用微软自带的就不用第三方的,基于这个原则先想到的ORM模型就是Entity Framework,于是动手尝试一下. 默认情况Visual Studio 2010的.NET项目模板及类型模板中的Entity Framework是不支持Oracle数据库的,找了一圈发现第三方有些插件,但试了一下都不尽如人意,而Orac

Android创建和使用数据库SQLIte

一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了.SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用SQLite来存储数据的. SQLite体系结构图如下:

SPL3.0正式发布!支持多种数据库访问哦

访问|数据|数据库 SPL 3.0正式发布,升级说明 经过一段时间的修改,SPL终于升到3.0了,之所要升到3.0,主要是因为增加了两种连接方式:ODP.NET与ODBC ODP.NET极大了增强了SPL对Oracle数据库的访问能力,目前使用ODP.NET连接Oracle是最佳的选择,相关的文章可以在网上找一下,蛮多的. ODBC是.NET Framework1.1新增的功能,可以对其他类型的数据库采用ODBC的连接方式. 因此上面两种连接方式的增强,使SPL可以更强的支持多种数据库. SPL

andrid数据库sqlite的使用问题

问题描述 andrid数据库sqlite的使用问题 请问各位大神 android的数据库应该怎么使用 比如已经创建了一个database类,并建好了数据库和表,要在登录界面用到数据库的数据,该怎么在登录界面的Java文件中调用 解决方案 http://blog.csdn.net/rhljiayou/article/details/7085347 解决方案二: C#使用SQLite数据库问题SQLite数据库中多线程使用问题Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找

unbutu下Qt4支持sqlite3数据库的设置

qt4如果要支持sqlite3数据库,则必须修改qmke -project和qmake之后生成的Makefile文件中的INCPATH和LIBS目录: INCPATH问Qt支持的头文件路径,LIBS为Qt支持的库文件的路径,针对sqlite3分别为sqlite3.h和libsqlite3.so.0.8.6(注意此文件是libsqlite3.so.0这儿符号链接文件所连接到的真实文件) 1 INCPATH = -I/sqlite3.h文件的绝对路径的上一级目录(-I为大写的i) 例如我的sqlit