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。
每個數據庫其實對應了一個文件夾,裏面一般會有一個core.xml,是整個數據庫的配置文件,記錄好了所有的表格設置。
Blobs目錄是用來存放二進制大對象的,例如圖片。表中此類字段並不真正存圖片,而是記錄一個指針。該指針定位到Blobs裏面來找圖片。
ContentType目錄是用來存放所有業務實體類型的程序集的。該數據庫除了使用純XML作爲存取機制這個亮點之外,還有一個亮點就是完全面向對象。所有表的操作其實都是通過對象來完成的。
Tables裏面包含了表格。