SharpHSql 是一个纯C#写就的支持sql92标准的轻量数据库引擎,当我们为了便于发布而选用单DLL的数据库引擎时,SharpHsql以它的100% managed code而受到青睐。大家一下子欢呼:找到access的替代品了!

但实际上,我认为SharpHsql应该谨慎地用于实际生产环境,我们先来了解一下它的存储原理。

不像其它的纯内存数据库或文件型数据库,SharpHSql在存储数据时相当取巧,使用.cfg文件存放一些数据库的信息和其它文件的位置,使用.log存放所有的DDL SQL,使用.data文件存放Cache的二进制序列化流,用.backup存放.data一样的数据,相当于多一个存放多一层保险。

查看SharpHsql源码,里面的处理还是比较简单的:

每一次insert delete (update会分解成先 delete 再 insert,只是 check 会放到 insert 后进行)都分别有一个 transaction 来对应
这个transaction是用于事务回滚时的rollback的,当rollback时,则用 delete 对应 insert ,用 insert 对应 delete
Table 是通过 Cache 来存放 Rows 的,也就是说数据的实际存储是在 Cache 这个类中
Index类是一棵AVL树,用来数据检索,当有row更新时,如果有索引存在,则需要更新这棵树
Channel就是用了区分transaction和权限检查,实际只是一个process中可以多channel访问同一数据库,而其它的process想访问是不行的
因为Database类打开数据库时,使用的是独占式文件打开,因为如果不独占的话,Cache的写入是会出问题的

数据库打开时的步骤:
1、取cfg文件,得到信息
2、反序列化.data,得到Cache
3、执行.log得到数据库结构

所以我们可以看出SharpHsql是独占式访问的,而且是完全加载所有数据到内存的
这样的结构我觉得仍然应该视其为一个内存数据库引擎,对于数据量会逐渐变大的实际生产环境来说,慎用;对于多并发环境来说,别用
所以SharpHsql要出pocket版本,使用compact framework,看来它的定位也是很准确的

如果利用SharpHSql的sql parser和 execute engine,使用 dataset 代替它的 index 和 cache,是可以很容易写出一个in memory database的,不过这种剽窃意义不大,只是说可行。

转载于:https://www.cnblogs.com/yangzixian/archive/2009/10/19/1586049.html

SharpHsql -- 只适合用于演示数据的数据库引擎相关推荐

  1. sql 只要一个字段相同则只显示一条数据_数据库

    数据库:管理数据的仓库,其本质是一种数据结构. 一.数据 数据:即信息,包括视觉信息.听觉信息等等.当前数据库主要存储的是视觉信息(数字.文字等等) 二.数据库的组成 数据库是由一张张数据表组成的. ...

  2. ssis 导入excel_使用SSIS包将MS Excel数据导入数据库

    ssis 导入excel The easiest way to import the data into the SQL database is using the Import Data wizar ...

  3. Python_爬虫数据存入数据库(超详细过程

    目录 一.新建项目 二.程序的编写 三.数据的爬取 一.新建项目 1.在cmd窗口输入scrapy startproject [项目名称] 创建爬虫项目 接着创建爬虫文件,scrapy genspid ...

  4. 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  5. 数据分析师只适合男生吗,女生可不可以胜任?

    在大多数人眼中,理工科一般都是男生的天下,而适合女生的专业多数偏文艺类的路线.最近数据分析师很火,发展前景好,待遇也高,是人们眼中的高薪工作.于是乎数据分析师日益发展成为十分抢手的职业.数据分析师给人 ...

  6. php select只有一条_读取数据库如何只取出一条数据????请赐教!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 感谢大家的帮助,我的问题解决了! 核心代码如下: if($_POST) { if($_POST['select'] === '') { echo(''); ...

  7. PolarFS :一个用于共享存储云数据库的超低延迟和容错分布式文件系统

    目录 1. 简介 2. 背景 3. 架构 4. I/O 执行模型 5. 一致性模型 6. FS中层的实现 7. 设计选择和经验教训 8. 价值评估 9. 相关工作 10. 结论 PolarFS : A ...

  8. delphi 演示数据路径

    链接里默认的--------------------------- Error --------------------------- I/O error for file "C:\Prog ...

  9. 新手项目:黑马blog (适合刚接触node和数据库MongoDB)

    来源:黑马前端 难度:⭐⭐(基础)--的新适合刚接触node和数据库MongoDB手小白 所需知识: 第三方模块: express框架(用于创建网站服务器以及路由) moogoose(连接数据库和操作 ...

最新文章

  1. 5.1.14 守护线程
  2. python面试基本题(你需要的)
  3. CBV装饰校验的三种方式session
  4. 人工智能离我们有多远/近?
  5. 中小型局域网规划实战案例
  6. 【jetsonnano】jetsonnano串口通信与esp8266 cutecom和minicom使用
  7. 最新卡通渲染效果图(附带一张次世代帅哥)
  8. 南蛮图腾(洛谷-P1498)
  9. sql库缓存命中率_SQL Server内存性能指标–第4部分–缓冲区高速缓存命中率和页面寿命期望
  10. LSTM 之父发文:2010-2020,我眼中的深度学习十年简史
  11. spring mvc统一异常处理(@ControllerAdvice + @ExceptionHandler)
  12. 事件和数据回发机制的实现
  13. Webgoat 笔记总结 Insecure Communication/Configuration/Storage
  14. 2017锤子科技发布会
  15. Appium的工作原理
  16. ELK+filebeat+redis 日志分析平台
  17. 机械制图--零件图--过渡线
  18. 百度拾取坐标系统平台根据点名获取坐标
  19. 广州坐标系转换大地2000_如何将百度坐标转换为国家2000坐标系?
  20. 公司java项目上线生产环境发布流程

热门文章

  1. 怎么确定迭代器后面还有至少两个值_学会迭代和迭代器,让你的程序更省内存...
  2. oracle ogg11.2.0.3,ogg在oracle database 11.2.0.3上还是谨慎使用集成捕捉模式
  3. oracle 尚未从池中获取连接,解决一个问题的思路 之“解决已经写满con.close() 仍然出现但是尚未从池中获取连接的连接池耗尽问题”...
  4. navmenu 收起没有动画 element_ABC360等3家英语动画片课程测评:用动画片学英语不靠谱?...
  5. python写网页脚本_东拼西凑用python脚本登录web管理页面做巡检(实现)
  6. matlab中符号对象的数据类型是,符号对象(Symbolic Object)的使用
  7. 关于分布式系统架构模块通讯方式选择的问题
  8. Linux netfilter源码分析(4)
  9. Leetcode - 142. Linked List Cycle II
  10. 带你一文搞懂网络层的IP协议\数据链路层的以太网\ARP协议以及DNS和NAT协议