• 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 发布在:博客园,转载请注明出处
  • 相关阅读:
    济南学习 Day2 T1 am
    济南学习 Day1 T2 pm
    济南学习 Day1 T3 am
    济南学习 Day 1 T2 am
    洛谷 P1209 修理牛棚== Codevs 2079 修理牛棚
    2016.10.30 济南学习 Day2 下午 T1
    餐厅随笔----2016.10.30 于济南 外出学习
    bzoj1671 [Usaco2005 Dec]Knights of Ni 骑士
    bzoj1088 [SCOI2005]扫雷Mine
    bzoj1655 [Usaco2006 Jan] Dollar Dayz 奶牛商店
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1541888.html
Copyright © 2020-2023  润新知