XML數據庫

http://www.cnblogs.com/chenxizhang/archive/2009/08/08/1541888.html

這是我正在開發的一個產品。很好理解,它是一個數據庫產品(或者稱爲解決方案),而且它直接就用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裏面包含了表格。



發佈了24 篇原創文章 · 獲贊 23 · 訪問量 142萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章