XML数据库

这是我正在开发的一个产品。很好理解,它是一个数据库产品(或者称为解决方案),而且它直接就用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。

image

每个数据库其实对应了一个文件夹,里面一般会有一个core.xml,是整个数据库的配置文件,记录好了所有的表格设置。

Blobs目录是用来存放二进制大对象的,例如图片。表中此类字段并不真正存图片,而是记录一个指针。该指针定位到Blobs里面来找图片。

ContentType目录是用来存放所有业务实体类型的程序集的。该数据库除了使用纯XML作为存取机制这个亮点之外,还有一个亮点就是完全面向对象。所有表的操作其实都是通过对象来完成的。

Tables里面包含了表格。

本文由作者:陈希章 于 2009/8/8 19:22:46 发布在:博客园,转载请注明出处
posted @ 2009-08-08 19:23  陈希章  阅读(13708)  评论(6编辑  收藏  举报