这是我正在开发的一个产品。很好理解,它是一个数据库产品(或者称为解决方案),而且它直接就用XML存储数据。
以下是一些基本介绍:
区别于现行的主流数据库,它的数据就是直接用XML文件存储的,而且它不是一个简单的关系型,也不是二维的。一份表格中的数据可以包含多个层次:
典型的例子是:订单表,除了包含订单的概要信息(订购单号,客户编号,订购日期等),还应该包含订单明细(产品编号,单价,数量等),以前要设置这样的数据库,一定是分成两个表的。这是因为在标准的关系型数据库,它仅仅是二维的数据结构。很难实现上述要求。而用XML来做就先天有这个优势。
当然,XML也有一些劣势,就是它的存取不是很高效,而且容量有限。但这并不成为大问题,或者这些问题都是相对的。我开发这一套数据库,就是想找到一个在中小型数据应用(尤其是要求数据结构很灵活的情况下)的数据库选择。
当然,虽然数据是用XML存储的,并不是说用户需要去操作那些文件。事实上,我已经开发好一套API,开发人员可以很方便地使用它们。
大致是类似下面这样的使用方式
using System;
using System.Collections.Generic;
using XMLDatabase;
using DataEntities;
using System.Linq;
namespace SampleApplication
{
class Program
{
static void Main(string[] args)
{
///插入1000个订单约54秒
Database db = Database.CreateInstance("Testdb", "E:\\Temp");
if (db != null)
{
db.Create<Order>("Orders");//创建订单表
db.Create<Customer>("Customers");//创建客户表
Customer c = new Customer() { CompanyName = "Microsoft", CustomerID = "AAAAAA" };
db.Insert<Customer>("Customers", c);//插入一个客户
var customers = from c1 in db.Select<Customer>("Customers")//选择客户
where c1.CompanyName.ToLower().Contains("mic")//进行过滤
select c1;
foreach (var item in customers)
{
Console.WriteLine(item);
}
Order o = new Order();
o.OrderId = 1;
o.CustomerID = "AAAAAA";
o.OrderDate = DateTime.Now;
o.OrderItems = new List<OrderItem>();
o.OrderItems.AddRange(
new[]{
new OrderItem(){ OrderId=o.OrderId, ProductId=1, Quantity=20, UnitPrice=20},
new OrderItem(){ OrderId=o.OrderId, ProductId=1, Quantity=20, UnitPrice=20},
new OrderItem(){ OrderId=o.OrderId, ProductId=1, Quantity=20, UnitPrice=20},
new OrderItem(){ OrderId=o.OrderId, ProductId=1, Quantity=20, UnitPrice=20}
});
db.Insert<Order>("Orders", o);//插入一个订单
var orders = from o1 in db.Select<Order>("Orders")//选择订单
select o1;
foreach (var item in orders)
{
Console.WriteLine(item);
}
}
Console.Read();
}
}
}
这套数据库产品会在合适的时候进行发布。以上只是一个简单的演示。
该产品基于.NET Framework 2.0开发。不需要任何外部的API。
每个数据库其实对应了一个文件夹,里面一般会有一个core.xml,是整个数据库的配置文件,记录好了所有的表格设置。
Blobs目录是用来存放二进制大对象的,例如图片。表中此类字段并不真正存图片,而是记录一个指针。该指针定位到Blobs里面来找图片。
ContentType目录是用来存放所有业务实体类型的程序集的。该数据库除了使用纯XML作为存取机制这个亮点之外,还有一个亮点就是完全面向对象。所有表的操作其实都是通过对象来完成的。
Tables里面包含了表格。