Upload
dinh-van-quyen
View
767
Download
8
Embed Size (px)
DESCRIPTION
Giới thiệu về DB4O
Citation preview
LOGO
GIỚI THIỆU VỀ DB4ONhóm 04 – Lớp SP Tin 4
Khoa Công nghệ thông tinMôn Cơ sở dữ liệu nâng cao
GVHD: ThS. Nguyễn Đặng Kim Khánh
Thành viên nhóm
Đinh Văn Quyên – K35.103.061
Nguyễn Ngọc Nhất Linh –
K35.103.031
Lê Thị Kim Nga – K35.103.037
2GIỚI THIỆU VỀ DB4O
Nội dung chính
3
Tạo lập và kết nối DB4O1
Cấu trúc lớp đối tượng và lưu trữ đối tượng2
Truy vấn đối tượng3
Một số tính năng khác4
GIỚI THIỆU VỀ DB4O
TỔNG QUAN VỀ DB4O
DB4O là một HQT CSDL đối tượng được phát triển và phân phối bởi Versant Corporation.
DB4O là một sản phẩm nguồn mở dựa trên 2 giấy phép GPL và dOCL.
Phiên bản ổn định mới nhất: 8.0 (.NET & Java).Hướng phát triển của nhóm:
Nền tảng: MS .NET 4.0 Ngôn ngữ: C# (VS2010)
4GIỚI THIỆU VỀ DB4O
TẠO LẬP VÀ KẾT NỐI CSDL
Mỗi csdl DB4O chỉ gồm 1 file duy nhất, phần mở rộng thường là .yap hoặc .db4o
Ở chế độ chạy cục bộ, csdl không cần phải được tạo trước, và có thể được tạo ra ngay trong quá trình truy cập (accessing) tới csdl.
Khác với chế độ client/server, chế độ cục bộ của DB4O không cần phải kết nối tới csdl với username, password, và việc truy cập cũng rất đơn giản.
5
using (IObjectContainer db = Db4oEmbedded.OpenFile([filename])){
//một số thao tác với db4o}
Transaction start
Transaction stop
GIỚI THIỆU VỀ DB4O
TẠO LẬP VÀ KẾT NỐI CSDL
Khởi động máy chủ
Kết nối máy chủ
6GIỚI THIỆU VỀ DB4O
Chế độ ClientServer
GIỚI THIỆU VỀ DB4O 7
Các đối tượng trong DB4O được lưu trữ dựa trên cấu trúc của lớp đối tượng định nghĩa trên ngôn ngữ của ứng dụng mà không cần phải có cấu trúc lớp đối tượng riêng dành cho csdl. Dưới đây là cú pháp tạo lớp đối tượng trong C#:
CÁCH TẠO LỚP ĐỐI TƯỢNG
[bổ_từ_truy_xuất] class <định_danh_lớp> [:lớp_cơ_sở]{
<Phần thân của lớp: bao gồm định nghĩa các thuộc tính và phương thức hành động>
}Trong đó:
+ [bổ_từ_truy_xuất] gồm private, public, protected, internal, protected internal,
+ <định_danh_lớp> là tên của lớp + [:lớp_cơ_sở ] đây là lớp được kế thừa
GIỚI THIỆU VỀ DB4O 8
public class Pilot { string _name; int _points; // các thuộc tính public Pilot(string name, int points) // phương thức xây dựng { _name = name; _points = points; } public string Name //phương thức khác { get { return _name; } }}
CÁCH TẠO LỚP ĐỐI TƯỢNG
Liên kết giữa các đối tượng được định nghĩa trong C# hoàn toàn khác so với cách định nghĩa của ODL. Trong C#, nó được định nghĩa rất đơn giản: mỗi lớp có 1 thuộc tính mà thuộc tính đó là một object reference.
Tuy nhiên, việc phải thiết lập mối liên kết ở cả 2 lớp (Inverse Relationships) là không bắt buộc.
9
LIÊN KẾT GIỮA CÁC ĐỐI TƯỢNG
GIỚI THIỆU VỀ DB4O
10
LƯU TRỮ CÁC ĐỐI TƯỢNG
Để lưu trữ một đối tượng, ta gọi phương thức Store()
using (IObjectContainer db = Db4oEmbedded.OpenFile("databaseFile.db4o")){
Pilot pilot = new Pilot("Joe");db.Store(pilot);
}
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
11
QBENative
Queries
LINQSODA
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
QBE (Query-By-Example ) là phương thức đặc biệt, tìm kiếm dựa trên các đối tượng mẫu
12
QBE
Một số hạn chế:
Không thể thực hiện các biểu thức truy vấn nâng cao. (AND, OR, NOT,…)
Không thể truy vấn trên các giá trị 0, rỗng.
Đối với những truy vấn phức tạp thì khó đọc và biết được đang truy vấn cái gì
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
13
QBE
Trả về tất cả các Pilot có Name là “John”
Truy vấn trên nhiều trường
Tạo ra đối tượng theExample kiểu Pilot, có trường Name là “Join” và dùng đối tượng này
để làm mẫu tìm kiếm
GIỚI THIỆU VỀ DB4O
Tạo ra đối tượng example kiểu Pilot, dùng đối tượng này để làm mẫu tìm kiếm
TRUY VẤN DỮ LIỆU
14
QBETrả về tất cả
đối tượng cùng kiểu
Pilot
Truy vấn các đối tượng lồng nhau
Truy vấn lồng 2 đối tượng Car,
Pilot
Truy vấn các đối tượng cùng kiểu
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
15
Native Queries Native Queries (NQ) được hiểu là truy vấn “bản
địa” hay truy vấn theo ngôn ngữ của ứng dụng. Kiểu truy vấn này giúp người lập trình không mắc phải các lỗi như sai tên hay kiểu lớp, tên trường,…bạn cũng sẽ tránh khỏi được các lỗi phát sinh khi chạy, do đó đây là cách tạo ra những câu truy vấn an toàn.
GIỚI THIỆU VỀ DB4O
Hạn chế của NQ là phải khởi tạo mọi đối tượng của lớp đang truy vấn lên csdl và chạy biểu thức truy vấn lên chúng, điều này sẽ làm chậm câu truy vấn đi rất nhiều.
Giải pháp cho vấn đề này là phân tích, tối ưu và dịch NQ sang truy vấn SODA để thực thi.
TRUY VẤN DỮ LIỆU
Để sử dụng NQ, cần phải thêm các thư viện sau vào project: Db4o-bjects.Db4o.NativeQueries.dll Db4object.Db4o.Instrumentation.dll Cecil.FlowAnalysis.dll Mono.Cecil.dll
GIỚI THIỆU VỀ DB4O 16
Native Queries
Truy vấn dữ liệu
17
Native Queries
IList<Pilot> result = container.Query(delegate(Pilot pilot) { return pilot.Name == "John"; });
Một số ví dụ
IList<Pilot> result = container.Query(delegate(Pilot pilot) { return pilot.Age < 18; });
IList<Pilot> result = container.Query(delegate(Pilot pilot) { return pilot.Age > 18 && pilot.Age < 30; });
TRUY VẤN DỮ LIỆU
Là kiểu truy vấn đơn giản, hỗ trợ .NET để truy vấn các đối tượng trong Db4o.
Db4o hỗ trợ giao diện .NET IQueryable . Điều này rất hữu ích khi xây dựng các lớp trừu tượng để tích hợp Db4o với các Framework khác.
18
LINQ
Để sử dụng LINQ, bạn phải thêm LINQ-namespace vào project :
using System.Linq;using Db4objects.Db4o.Linq;
Lưu ý rằng LINQ yêu cầu ít nhất là .NET 3.5
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
19
LINQ Cú pháp của LINQ gần giống như SQL, tuy nhiên nó hỗ trợ sửa lỗi cú pháp ngay tại bước phiên dịch.Truy vấn đơn giản
Truy vấn phức tạp hơn
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
20
LINQMột số ví dụ khác
Truy vấn theo tuổi
Truy vấn theo tên
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
21
Các tính
năng
Các tính năng tốt
Các tính năng xấu
Đánh chỉ mục
Tham chiếu
So sánh
Truy vấn thời gian
Like, Contains, Startswith, Endwith
Truy vấn rất chậm
Mảng
Gọi các phương thức phức tạp
LINQ
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
22
LINQ Tối ưu hóa LINQ
Khi chuyển sang truy vấn SODA, một số câu truy vấn không thể chuyển được
Câu truy vấn đơn giản, tối
ưu được
Khi phát hiện câu truy vấn chưa tối ưu, trong Visual Studio hiện lên thông báo: “A first chance exception of type'Db4objects.Db4o.Linq. Query Optimization Exception'occurredin Db4o-bjects.Db4o.Linq.dll”
GIỚI THIỆU VỀ DB4O
TRUY VẤN DỮ LIỆU
Cần lưu ý:
GIỚI THIỆU VỀ DB4O 23
LINQ
TRUY VẤN DỮ LIỆU
Là mức thấp nhất của API truy vấn, cho phép truy cập trực tiếp đến các nút của đồ thị truy vấn.
24
SODA Query
API
GIỚI THIỆU VỀ DB4O
Đối với hầu hết các ứng dụng LINQ và Native Query sẽ là giao diện truy vấn tốt hơn.
Tuy nhiên ở những chương trình yêu cầu tạo ra những query tự động thì cần phải dùng đến SODA.
SODA là cơ chế truy vấn nền tảng trong DB4O, các kiểu truy vấn còn lại đều được dịch về SODA.
TRUY VẤN DỮ LIỆU
Một số ví dụ:
GIỚI THIỆU VỀ DB4O 25
SODA Query
API
GIỚI THIỆU VỀ DB4O 26
CẬP NHẬT CÁC ĐỐI TƯỢNG
+ Đầu tiên, truy vấn dữ diệu cần cập nhật+ Sau đó, thay đổi đối tượng và lưu trữ lại lần nữa vào CSDL
using (IObjectContainer db = Db4oEmbedded.OpenFile("databaseFile.db4o")){
var pilot = (from Pilot p in dbwhere p.Name == "Joe"select p).First();
pilot.Name = "New Name";// update the pilotdb.Store(pilot);
}
GIỚI THIỆU VỀ DB4O 27
XÓA CÁC ĐỐI TƯỢNGCác đối tượng được xóa từ CSDL bằng cách sử dụng phương thức Delete().
using (IObjectContainer db = Db4oEmbedded.OpenFile("databaseFile.db4o")){
var pilot = (from Pilot p in dbwhere p.Name == "Joe“select p).First();
db.Delete(pilot);}
MỘT SỐ TÍNH NĂNG KHÁC
IndexingSession ContainersBackupCallbackType HandlingException – Handling Runtime Monitoring…
28GIỚI THIỆU VỀ DB4O
INDEXING
Indexing (chỉ mục) là một kĩ thuật cơ bản ở mọi DBMS.
Đây là một cấu trúc dữ liệu cho phép tìm kiếm dữ liệu thuận tiện hơn.
Lợi ích: TRUY VẤN DỮ LIỆU với tốc độ cao hơn so với khi không dùng.
Hạn chế: indexing sẽ làm quá trình insert, update, delete diễn ra chậm hơn.
29
IEmbeddedConfiguration configuration = Db4oEmbedded.NewConfiguration();configuration.Common.ObjectClass(typeof (Person)).ObjectField("name").Indexed(true);
GIỚI THIỆU VỀ DB4O
SESSION CONTAINERS
Trong ứng dụng, đặc biệt là ứng dụng web, đôi khi ta cần xử lý các giao tác (transaction) xảy ra đồng thời. Mỗi giao tác thực hiện một số xử lý mà các giao tác khác không được can thiệp.
DB4O giải quyết vấn đề này bằng cách sử dụng session containers (SC). SC là một object-container con, nó có giao tác và reference cache riêng, nhưng chia sẻ tài nguyên với parent container.
30
using (IObjectContainer rootContainer = Db4oEmbedded.OpenFile(DatabaseFileName)){
//parent container operationusing (IObjectContainer session =
rootContainer.Ext().OpenSession()){
//session container operation}
}
GIỚI THIỆU VỀ DB4O
BACKUP
DB4O cho phép backup (sao lưu) csdl ngay trong khi đang chạy. Tính năng này áp dụng cho cả csdl cục bộ và máy chủ.
31
//single-user modecontainer.Ext().Backup("backup.db4o");//client-server modecontainer.Ext().Backup(new FileStorage(), "advanced-backup.db4o");
GIỚI THIỆU VỀ DB4O
CALLBACK
Callback, hay còn gọi là event (sự kiện), được dùng để kích hoạt một hành động bổ sung trong khi csdl đang hoạt động.
Ba bước để đăng kí một sự kiện trong DB4O: Đầu tiên, lấy 1 thể hiện của IEventRegistry từ
object container; Đăng ký hàm xử lý cho một sự kiện nào đó; Định nghĩa hàm xử lý sự kiện.
32GIỚI THIỆU VỀ DB4O
THẮC MẮC VÀ THẢO LUẬN
GIỚI THIỆU VỀ DB4O 33
LOGO
Thực hiện bởi nhóm 04 – Tin 4