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 李占卫 阅读(3632) 评论(12) 编辑 收藏

 回复 引用 查看   
#1楼 2009-11-19 11:41 灵感之源      
SharpHSQL几年前我已经联系过作者,确认停止开发了,用这个吧,从最新的HSQLDB移植,支持VS、C/S、ADO.NET EF:http://effiproz.codeplex.com/

这个开源的C#数据库更先进,支持C/S:http://db.deveel.com

或者直接用C#版的SQLite:http://code.google.com/p/csharp-sqlite/ 需要下载安装TortoiseHG获取源代码

 回复 引用 查看   
#2楼 2009-11-19 11:42 egmkang      
嵌入式环境对内存比较敏感,占用内存呢?
程序崩溃了,数据会不会不同步?
性能跟SQLite相比如何呢?

 回复 引用 查看   
#3楼[楼主] 2009-11-19 12:22 李占卫      
@灵感之源
THX

 回复 引用 查看   
#4楼[楼主] 2009-11-19 12:23 李占卫      
@egmkang
这个到是没有对比过。

 回复 引用 查看   
#5楼 2009-11-19 12:56 imap      
@灵感之源
不错。

 回复 引用 查看   
#6楼 2009-11-19 12:57 canbeing      
现在听说过许多XXLite的数据库,像google app的、android的,不过不大清楚有哪些用处
 回复 引用 查看   
#7楼[楼主] 2009-11-19 14:21 李占卫      
@灵感之源
C#版的SQLite没有提供SVN地址啊。怎么获取到那?

 回复 引用 查看   
#8楼 2009-11-19 14:43 灵感之源      
@李占卫
用TortoiseHG

 回复 引用 查看   
#9楼[楼主] 2009-11-19 15:11 李占卫      
@灵感之源
恩,获取到了。

 回复 引用 查看   
#10楼 2009-11-19 15:49 咔咔      
研究一下
 回复 引用 查看   
#11楼 2009-11-19 16:49       
sqlite 非常好用。现在很多的磁盘操作我交给sqlite了。
引用灵感之源:
SharpHSQL几年前我已经联系过作者,确认停止开发了,用这个吧,从最新的HSQLDB移植,支持VS、C/S、ADO.NET EF:http://effiproz.codeplex.com/

这个开源的C#数据库更先进,支持C/S:http://db.deveel.com

或者直接用C#版的SQLite:http://code.google.com/p/csharp-sqlite/ 需要下载安装TortoiseHG获取源代码


。。。。。这么多