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:针对各种操作的的执行序列是什么,为什么这样。其他商业数据库的执行序列又是什么那?(图中已经提供了) 

 

 

posted @ 2009-11-19 11:27  李占卫  阅读(6012)  评论(12编辑  收藏  举报