tin4 nhom4 seminar db4o

34
LOGO GIỚI THIỆU VỀ DB4O Nhóm 04 – Lớp SP Tin 4 Khoa Công nghệ thông tin Môn Cơ sở dữ liệu nâng cao GVHD: ThS. Nguyễn Đặng Kim Khánh

Upload: dinh-van-quyen

Post on 03-Aug-2015

762 views

Category:

Documents


8 download

DESCRIPTION

Giới thiệu về DB4O

TRANSCRIPT

Page 1: Tin4 Nhom4 Seminar DB4O

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

Page 2: Tin4 Nhom4 Seminar DB4O

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

Page 3: Tin4 Nhom4 Seminar 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

Page 4: Tin4 Nhom4 Seminar 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

Page 5: Tin4 Nhom4 Seminar 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

Page 6: Tin4 Nhom4 Seminar 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

Page 7: Tin4 Nhom4 Seminar DB4O

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

Page 8: Tin4 Nhom4 Seminar DB4O

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

Page 9: Tin4 Nhom4 Seminar DB4O

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

Page 10: Tin4 Nhom4 Seminar 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

Page 11: Tin4 Nhom4 Seminar DB4O

TRUY VẤN DỮ LIỆU

11

QBENative

Queries

LINQSODA

GIỚI THIỆU VỀ DB4O

Page 12: Tin4 Nhom4 Seminar 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

Page 13: Tin4 Nhom4 Seminar 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

Page 14: Tin4 Nhom4 Seminar 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

Page 15: Tin4 Nhom4 Seminar 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.

Page 16: Tin4 Nhom4 Seminar DB4O

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

Page 17: Tin4 Nhom4 Seminar DB4O

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; });

Page 18: Tin4 Nhom4 Seminar DB4O

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

Page 19: Tin4 Nhom4 Seminar 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

Page 20: Tin4 Nhom4 Seminar 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

Page 21: Tin4 Nhom4 Seminar 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

Page 22: Tin4 Nhom4 Seminar 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

Page 23: Tin4 Nhom4 Seminar DB4O

TRUY VẤN DỮ LIỆU

Cần lưu ý:

GIỚI THIỆU VỀ DB4O 23

LINQ

Page 24: Tin4 Nhom4 Seminar DB4O

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.

Page 25: Tin4 Nhom4 Seminar DB4O

TRUY VẤN DỮ LIỆU

Một số ví dụ:

GIỚI THIỆU VỀ DB4O 25

SODA Query

API

Page 26: Tin4 Nhom4 Seminar DB4O

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);

}

Page 27: Tin4 Nhom4 Seminar DB4O

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);}

Page 28: Tin4 Nhom4 Seminar DB4O

MỘT SỐ TÍNH NĂNG KHÁC

IndexingSession ContainersBackupCallbackType HandlingException – Handling Runtime Monitoring…

28GIỚI THIỆU VỀ DB4O

Page 29: Tin4 Nhom4 Seminar 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

Page 30: Tin4 Nhom4 Seminar 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

Page 31: Tin4 Nhom4 Seminar 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

Page 32: Tin4 Nhom4 Seminar 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

Page 33: Tin4 Nhom4 Seminar DB4O

THẮC MẮC VÀ THẢO LUẬN

GIỚI THIỆU VỀ DB4O 33

Page 34: Tin4 Nhom4 Seminar DB4O

LOGO

Thực hiện bởi nhóm 04 – Tin 4