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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

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

 

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


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

 

OEA 如何支持单机版


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

image

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

image

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

image

有兴趣的朋友可以在 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 的速度也不慢,数据量不是非常大的情况下,应该没有问题。

 

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

image

 

 

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



本文转自BloodyAngel博客园博客,原文链接:http://www.cnblogs.com/zgynhqf/archive/2012/04/25/2469623.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
27天前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
31 8
|
1月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
1月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
|
1月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
2月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
2月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
167 1
|
1月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
40 0
|
3月前
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
524 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
2月前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
119 0
|
3月前
|
SQL 存储 小程序
【教程】navicat配合HTTP通道远程连接SQLite数据库
本文介绍了如何通过 Navicat Premium 工具配合 n_tunnel_sqlite.php 和 HTTP 通道远程连接服务器上的 SQLite 数据库。SQLite 是一种自给自足的、无服务器的 SQL 数据库引擎,由于其端口未对外开放,直接使用 Navicat 进行远程连接不可行。文章详细记录了使用 HTTP 通道实现远程连接的过程,包括定位本地 `ntunnel_sqlite.php` 文件,将其上传至服务器,并通过 Navicat 配置 HTTP 通道连接 SQLite 数据库的具体步骤。
177 0
【教程】navicat配合HTTP通道远程连接SQLite数据库
下一篇
无影云桌面