C#开源数据库介绍
1:前言
今天给大家介绍一个内存数据库,纯C#写的。SharpHSql。这个数据库我的意见是:对于大量高并发的情况最好还是不要用这个数据库。可能有些朋友会问“那你还给大家介绍? ”。呵呵,别慌,我们虽然不能在开发环境运用这个框架,但是我们可以看看他是怎么一步一步实现了数据库的。(有些地方和Oracle的逻辑是一样的)。如果您有兴趣就继续往下看。
2:提供的功能
该框架完全支持sql92标准,如下语句都可以运行
1:DROP TABLE IF EXIST xxx
2:CREATE TABLE xxx (id int NOT NULL PRIMARY KEY, name longvarchar);
3:INSERT INTO xxx () values ()
4:Update xxx set aa=bb where cc=1
5:Select * from a,b,c where a.id=b.id and b.id=c.id order by a.id
6:select count(a) ,sum(b) from xxx group by id
7:Delete from xxx
8:CALL ABS(-1);
9:SHOW DATABASES;
10:SHOW TABLES;
11:SHOW ALIAS;
12:SHOW PARAMETERS
13:SHOW COLUMNS
14:支持Sql语句和存储过程
15:支持事务
运行该框架会产生4中文件
1:.cfg文件,用于存放一些数据库的信息和其它文件的位置
2:.log文件,用于存放所有的DDL SQL
3:.data文件,用于存放Cache的二进制序列化流
4:.backup文件,用于存放.data一样的数据
3:大概的框架逻辑
看如下的序列图
简单介绍一下重要的类
Database:一个数据库,多个数据库存储到DatabaseController 中的HashTable中。
Table:表,多个表名存储到 Database的HashTable中。表中含有以ArrayList存储的Column(列)和Index(索引),Cache(数据)
Column:一列的描述,包含列名称,列值类型,列值是否为空什么的
Row:行,提供众多有关行的方法但不存储数据
Select:查询,提供众多查询的方法
Access:权限,所有User以ArrayList形式存储到这里
Cache:数据或是缓存对象,完成内存数据与文件数据的转换
Index:索引,一棵AVL树,当有row更新时,切索引存在,则需要更新这棵树
Transaction:事务,
4:后记
该框架在启动的时候是把所有的数据加载到内存中去,并且对于数据文件时独占访问的。这样就导致他的应用环境最适合与手机等移动设备。
最后给大家留个思考的问题
1:针对各种操作的的执行序列是什么,为什么这样。其他商业数据库的执行序列又是什么那?(图中已经提供了)