技术开发 频道

细说.NET开源数据库的前世和今生

  【IT168 评论】后来者可以充分利用前人的成果,在开发界,我们也会这样做。我们可以发现很多.NET的开源项目都是从优秀的Java项目移植过来的:我用得比较多像NHibernate、DotLucene(暂停开发...)、iTextSharp、Quartz.NET等。移植总比从头写轻松多了,不是吗?

  数据存储是软件中不可或缺的组成部分。我们所熟知和使用的,以前有Access,现在有MS SQL Server、Oracle、DB2这些商业数据库,开源的有PHP用得最多的MySQL,有趣的是PHP内置了SQLite。比较少用Firebird、PostgreSQL、Berkeley DB等。

  几年前我写了一些开源项目的随笔,数据库是其中一种,不过当时还没有出现成熟的.NET开源数据库,写得最多的倒是在嵌入式应用最广泛c写的SQLite。我对嵌入式/轻量级的数据库有情结,对SQLite尤甚。SQLite的应用非常广泛,如官方所说的诺基亚开源手机操作系统塞班(Symbian)、Mozilla、Safari、Chrome和非常多的桌面应用等。

  后来出现了ADO.NET Provider for SQLite(for .Net 1.x的,现在停止开发),最后出现了现在.NET程序使用最多的来自phxsoftware的System.Data.SQLite,最出名的应用者估计就是飞信了。不过,这些都不是开源的.NET数据库,充其量其实包装(wrapper),而且是最原始的那种InterOp的做法,连Managed C++都不是。.NET都发展了9年多了,是时候有一个像样的数据库了。即便不是原创的,从Java移植一个成熟的也是不错的。

  差不多那个时候,出现了一个人,Mark Tutt,写了第一个.NET数据库(据我所知):SharpHSQL,这是从Java界应用非常广泛的HSQLDB移植过来的,而HSQLDB又是从HSQL衍生过来的,不过这是另外一个话题了。Mark Tutt移植完了就不继续维护了,这倒不是大问题,问题是他移植的版本根本保存不了数据到文件(所谓的持久化),在内存中跑完,程序关闭就没了,根本就没法用(你只想用纯内存版另当别论)。

  HSQL,这就是SharpHSQL的前世,但今生呢?Mark Tutt之后,andresv接过了SharpHSQL,并让它成功地让数据保存到文件。感谢上帝,终于有一个纯.NET的数据库了。另外说一下,andresv还是另外一个不大出名的ORM-Retina.NET OR/M的作者。

  可以预想到的是,andresv继承了Mark Tutt的“光荣传统”,在项目移植完了就不再维护了,以至于HSQLDB发展得红红火火的,SharpHSQL还像个玩具那样弱不禁风。

  在HSQL的薪火貌似终止的时候,出现了一个庞然大物让我眼前一亮:Minosse Relational DataBase System,一个大型的纯C#开源数据库系统。嗯,不是单纯的引擎,是系统。可惜,开源界最臭名昭著的噩梦又发生在Minosse身上,在经过短暂的狂喜之后,便失去了继续开发的动力。

  开源界的.NET数据库再次陷入了静寂。

  直到今年,再次风起云涌,一下子冒出了3个重量级的项目:csharp-sqlite、EffiProz、DeveelDB。

  首先说说csharp-sqlite,相信部分同学已经对这个项目有一些了解:这是SQLite最新版本的C#移植版,虽然其作者Noah Hart认为这不能算是移植,而是用C#模拟C。这个移植版是100%二进制兼容SQLite数据库格式的,所以你可以用它来读写SQLite创建的数据库。该作者曾说,这只是一个为了学习C#的练手项目,而且一练就2年多,估计都练到九重天了吧。总的来看,这个作者相当重口味。

0
相关文章