数据库,在软件中已经是一个重要的部分了,基本上的软软件中都会用到数据库,但是数据库也有很多种,在这里我只是分享下自己在C#下使用轻量级数据库的一些经验和感想。

首先说下当时遇到的问题,

1.到底用不用数据库?

虽然数据库在软件中是一个重要的组成部分,但是不是所有的软件都需要数据库。如果可以简单的通过写文件或者使用配置文件的方式来解决问题的话,我觉得应该是不需要使用数据库的。而当时的情况是经过几番小的争论,还是觉得使用数据库,于是遇到了第二个问题。

2.用什么数据库?

由于当时对于数据库的功能要求不是太高,只要求能进行非常简单的查询和插入操作,所以选择使用轻量级的Access数据库,需要说明的是,功能要求简单,但是其中会创建比较多的数据表,使用读写文件的方式管理不是很方便,还会产生非常多的记录文件,所以数据库是不能省掉的。

解决这两个问题后,就遇到了我想要分享的干货了。

(1).多数据库连接的问题

(2)数据插入的效率问题

虽然这里很简单的列出来了当时遇到的问题,但是由于当时的数据库部分是其他人写的,还是被搞得很头大的。首先就是多数据库连接的问题,数据库的操作使用的是会话模式,每一种类型的操作就是一个会话,而每个会话都对应一条数据库连接。我在一个会话中去数据库创建了一张新的表,完成后关闭会话。然后在另一个会话中去向创建的表中插入数据。伪代码如下

创建会话A,B。

打开会话A,B

使用会话A创建一张表Tab1。

关闭胡话A。

使用会话B向Tab1中插入数据。

从代码上看,应该是不会有太大的问题的,但是执行的时候出现了意想不到的情况,在插入数据这里产生异常,提示:Tab1不存在!

这个,一看就蒙了啊,程序是顺序执行的,明明我是先创建的表,然后再去插入的数据,怎么会提示表不存在呢?好吧,单步调试试试,这种时候就是应该发挥集成编译环境的优势,不用白不用,对吧。于是我果断开始调试,执行的结果,确定异常是插入数据的时候出现的。然后我想到了去看看数据库里边的内容,于是打开Access在执行完建表的操作后去看是不是真的有这张表。使用Access打开数据库看看,里面都有些什么东西,然后就发现Tab1是存在的!这下又蒙了,表是存在的,但是还是报错,不急,还可以单步调试不是?于是我开始耐心的一步一步调试,然后更邪门的事情发生了:程序执行正常,没有在这里发生异常!!!瞬间崩溃的感觉有没有?不行,说不定是什么偶然,再单步调试试试,说不定就能发现什么,然后快速的熟练的按下F10一步步过,结果异常又出来了!!!没事,这个时候就应该多调试下,不能放弃。于是开始了各种调试+实验,最终发现了一些规律:表是创建好了的,如果快速的从创表到插数据就会出错,如果建表后2秒左右再插入数据就不会出错。经过各种分析后终于得出来结论:

1).如果是在同一条连接中建表和插入数据的话,是不会有任何问题的。

2).创建应该是马上就完成的。

3)插入数据的会话(或者说是到数据库的连接)会在2秒后才能知道新建的表的存在,或者说是这条连接会以2秒/次的频率去扫描数据库的变化。

知道问题的大致原因,解决问题就变得比较简单了,将这两个事情放到一个会话中去就OK了。但是这个过程却比较涨姿势的,因为出现了运行出错,但是单步调试不出错的情况。现在想想,这种情况应该都可以归结为运行和单步调试时执行代码之间的间隔时间不一样。

OK连接这个问题搞定后,就到了这个让我感觉相当忧伤的问题上了:数据的插入效率。项目中大概 每秒钟最多会有500条数据需要存储,但是使用Access数据库存储的速度是 200条左右,这个意味着如果程序在最极端的情况下运行,数据库的存储会一直滞后的。很明显是需要优化的,但是在我和队友的各种努力之下,数据库的存储速度也只有300多点,其中用上了事物、存储过程等方法。在几番努力之后,发现在别人的C++程序中,使用Access存储数据的一些经验,之前也遇到了类似的情况,但是最后使用了数据集的方式,将存储速度提升到了上万(虽然和大型数据库比起来差得远,但是还是够用了)。一听有这种解决方案,眼前一亮的感觉啊,于是马上开工,在MSDN上查到C#下也有类似的方式,使用的是DataSet,经过几番折腾,终于可以使用Dataset的方式存数据了,但是结果是:之前的速度还慢。嗯不要放弃,不是还有Linq嘛,这个可是.Net的一大特色呢,最后痛苦的发现:还不如DataSet快。。。。

经过各种折腾,以及请教老师,最后决定换数据库。那么问题又来了,换成什么数据库?MySql、SqlServer、Oracle什么的就不用考虑了----太大了,完全用不着。比较常见的轻量级数据库,除了Access,使用的比较多的就是SQlite了,安卓上面也是使用的Sqlite。上网搜索相关的资料后,很快的就将数据库问题搞定了。

简单的总结一下,就是:

1.数据库的连接,不同连接之间的表的同步需要一定的时间。

2.Access数据库确实不是那么的好用,除了可以Office直观的操作外。

3.在软件的前期开发中,当使用一个数据库搞定不了一些事情的时候,就应该考虑一下换数据库。

4.Access的效率还是可以满足一些简单的需求的,或许在C++中使用Access能让Access发挥得更好。

关于C#下使用轻量级数据库的一些经验相关推荐

  1. 开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本

    开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本出了2个多月了,我一直没有给大家报道,这是目前唯一发现的用纯C#开发的稳定的轻量级数据库引擎,在我的建议下,已经支持Unicode,包 ...

  2. Java:Speedment 3.2的发布–现在启用轻量级数据库微服务

    几种传统的ORM不能完全遵循Java模块封装(JPMS). 这通常意味着在部署微服务时会使用很多不必要的文件和类. 最新的主要版本3.2的开源 Speedance通过引入模块系统支持来解决此问题,该模 ...

  3. Oracle occi 抓包,instantclient 32下载-instantclient-basic(轻量级数据库)32位 11.2.0.4.0 官方版 - 河东下载站...

    instantclient-basic(轻量级数据库)32位是款完全免费的数据库客户端:提高这款软件,您可以不用进行安装标准的客户端,就可以支持您使用OCCI.ODBC程序等,还不要进行修改,就可以正 ...

  4. 【牛角书】轻量级数据库SQLite与H2比较

    对 PHP程序员来说,SQLite可以快速的搭建数据库开发环境,提供轻松.自容器.无配置.无独立服务的数据库环境,所有数据保存在一个文件里.当使用 MySQL 作为最终生产平台时,SQLite 是不可 ...

  5. 最近发现的 3 个 Python 轻量级数据库,好用到爆!

    你好,我是征哥,在写程序的时候经常会需要将数据保存到本地,比如是配置文件,或者是中间过程数据,通过情况下我会选择 json.pickle 或者 sqlite.但是他们都有点不大方便. 比如 json ...

  6. 小型mysql_小型数据库的选择(轻量级数据库)(转)

    小型数据库的选择(轻量级数据库) 一直使用Sql Server开发,没有用过Access之外其它的DB.最近正想做个小型工具,这种小东西当然不可能用Sql Server数据库啦,可又不想用Access ...

  7. 小型数据库的选择(轻量级数据库)

    小型数据库的选择(轻量级数据库)     一直使用Sql Server开发,没有用过Access之外其它的DB.最近正想做个小型工具,这种小东西当然不可能用Sql Server数据库啦,可又不想用Ac ...

  8. 轻量级数据库sqlite,spring boot+sqlite的配置详解 (一)

    spring boot+sqlite的配置,及成功运行详解 sqlite数据库的安装与调试 首先,通过sqlite官方地址下载对应的安装包 https://www.sqlite.org/downloa ...

  9. h2database轻量级数据库

    h2database轻量级数据库 H2最完整的资料下载:http://download.csdn.net/detail/yixiaoping/5956595 h2和derby一样,都是轻量级数据库,h ...

最新文章

  1. [转载] 英语科技论文写作——Difference between APAMLA
  2. mysql暂停触发器_mysql如何临时禁用触发器
  3. go 学习Printf
  4. 信息学奥赛C++语言:的士收费
  5. 立即表达式的多种写法与注意点以及in操作符的作用
  6. 跟我一起学docker(15)--监控日志和日志管理
  7. 回溯法解决0-1背包问题
  8. python的传参是传值还是传址
  9. Python—什么是duck type鸭子类型
  10. librtmp读包阻塞问题修复
  11. 中原银行AI面试记录
  12. Macbook安装pkg
  13. html播放音乐怎么隐藏,酷狗音乐隐藏的小秘密 咋让听歌更方便
  14. 为什么类只能单继承,而接口可以多继承?
  15. 微服务系列:Nacos的搭建演武版(单机+集群+监控)
  16. 微软计算机键盘上Tab,电脑键盘上的tab键有什么功能
  17. PMI-ACP练习题(23)
  18. 八种求职者最易被面试官拒绝
  19. 解决Git拉取代码时报错 Cloning into ‘h5functionpage4xwc.git~‘..fatal: protocol ‘?[200~http‘ is not supported
  20. 肚脐眼周围疼痛怎么回事,10种方法来预防

热门文章

  1. android播放mp3功能,Android Studio实现简单音乐播放功能的示例代码
  2. AIR32F103(八) 集成Helix MP3解码库播放MP3
  3. Image steganalysis with convolutional vision transformer
  4. Android6.0权限管理-PermissionsDispatcher
  5. 打开谷歌变成桔梗导航的解决方案
  6. C++学生考勤管理系统报告
  7. android cmd 命令
  8. Linux中关闭SELinux的方法
  9. range arange
  10. vue中Select支持模糊搜索 ( iview )