Tiểu luận môn cơ sở dữ liệu nâng cao Cơ sở dữ liệu đồ thị Neo4j - Pdf 26

Báo cáo chuyên đề cơ sở dữ liệu nâng cao
LỜI MỞ ĐẦU
«
Dữ liệu đã ra đời rất lâu, ngay cả lúc ngành công nghệ thông tin chưa khai sinh
đã có khái niệm dữ liệu rồi. Dữ liệu là tập hợp thông tin có cấu trúc. Tuy nhiên, thuật ngữ
này thường dùng trong công nghệ thông n và nó thường được hiểu rõ hơn dưới dạng một tập hợp
liên kết các dữ liệu, thường đủ lớn để lưu trên một thiết bị lưu trữ như đĩa hay băng. Dữ liệu này được
duy trì dưới dạng một tập hợp các tập n trong hệ điều hành hay được lưu trữ trong các hệ quản trị
cơ sở dữ liệu.
Ngày nay, với lượng dữ liệu khổng lồ, việc cập nhật và truy xuất dữ liệu thường xuyên, đây là
một thách thức không nhỏ đối với các hệ cở sở dữ liệu. Quá trình Am kiếm, phân Bch cấu trúc dữ liệu
của thông n, các chuyên gia nghiên cứu cơ sở dữ liệu đã cho ra đời một hệ cơ sở dữ liệu mới mà
thừa kế từ cơ sở dữ liệu quan hệ, cơ sở dữ liệu dạng key-value, cơ sở dữ liệu tài liệu, Column-Family,
đó là cấu trúc cơ sở dữ liệu đồ thị. Dữ liệu đồ thị là cách thức lưu trữ thông tin ở dạng đồ
thị những nút và cạnh.Nút của đồ thị sẽ có quan hệ đối với những nút khác thông qua
các cạnh của đồ thị. Với cách thức lưu trữ này, việc quản lý dữ liệu trở nên mềm dẽo
và dễ dàng hơn ngay cả trong việc ứng dụng tri thức vào khối dữ liệu lưu trữ.
Tiểu luận này trình bày một mã nguồn mở mà lưu dữ liệu dưới dạng cấu trúc sở
dữ liệu đồ thị, đó là Neo4j và ngôn ngữ truy vấn đồ thị thông minh Cypher.
Tiểu luận gồm có 5 chương:
Chương 1. Neo4j là một cơ sở dữ liệu đồ thị: giới thiệu về Neo4j và so sánh neo4j với
RDBMS, Key-Value, cơ sở dữ liệu tài liệu.
Chương 2. Cơ sở dữ liệu đồ thị Neo4j: đi vào chi tiết cơ sở dữ liệu được lưu trữ trên
Neo4.
HVTH: Nguyễn Thành Đệ Trang: 1
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
Chương 3.Framework Java API: Các khái niệm cơ bản để duyệt đồ thị bằng Java API.
Chương 4. Ví dụ về mồ hình đồ thị và duyệt đồ thị: Chương này có ta các ví dụ về đồ
thị và truy vấn dữ liệu thông qua Java API và ngôn ngữ truy vấn đồ thị Cypher.
Chương 5. Ngôn ngữ truy vấn đồ thị Cyper: Chương này trình bày văn phạm trong
Cypher, các qui định và cách truy vấn đồ thị băng Cypher.

nối dữ liệu.
HVTH: Nguyễn Thành Đệ Trang: 4
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
Hình 2.1. RDBMS
Hình 2.2. Cơ sở dữ liệu đồ thị bằng RDBMS
1.1.2. Xây dựng một cơ sở dữ liệu đồ thị như một cách lưu trữ Key-Value
Mô hình Key-value là một mô hình rất tốt và phổ biến cho việc tìm kiếm những
danh sách khóa hay giá trị. Khi các giá trị được kết nối với nhau, bạn sẽ nhận được một
đồ thị. Neo4j cho phép ta tạo cấu trúc dữ liệu đơn giản từ một cấu trúc phức tạp, dữ
liệu được kết nối.
Hình 2.3. Lưu trữ dạng Key-Value
HVTH: Nguyễn Thành Đệ Trang: 5
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
Ghi chú: K* đại diện cho khóa(key) và V* đại diện cho giá trị(value). Một vài khóa
cũng có thể trỏ đến những khóa khác như trỏ đến giá trị vậy.

Hình 2.4. Cơ sở dữ liệu đồ thị lưu dạng Key-value
1.1.3. Cơ sở dữ liệu đồ thị cũng có liên quan đến mô hình Column-Family
Cơ sở dữ liệu Column-Family(BigTable) là mô hình cái tiến của key-value, sử
dụng từ “families” cho phép nhóm các dòng. Việc lưu trữ trong đồ thị, gia
đình(families) trở thành phân cấp, và giữ mối quan hệ giữa các dữ liệu, dữ liệu trở nên
tường mình.
1.1.4. Điều hướng cơ sở dữ liệu đồ thị như một lưu trữ tài liệu
Cơ sở dữ liệu tài liệu chứa những phân cấp rõ ràng, mô hình dữ liệu đơn giản
mà có thể dễ dàng chuyển đổi như mô hình cây. Dĩ nhiên đó là mô hình đồ thị. Tham
chiếu đến tài liệu khác(hoặc những phân tử trong tài liệu) như một cây và sẽ có nhiều
HVTH: Nguyễn Thành Đệ Trang: 6
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
dữ liệu điện điện cho những dữ liệu tương tự nhau. Khi dùng Neo4j, mối quan hệ đó sẽ
dễ dàng hơn.

Chú ý rằng nút có thể quan hệ với chính nó:
HVTH: Nguyễn Thành Đệ Trang: 9
Nút bắt đầu Nút kết thúc
Quan hệ
Quan hệ đi vào
Quan hệ đi ra
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
Tất cả các mối liên hệ có một kiểu quan hệ(relationship type). Ví dụ sau đây cho thấy
việc follow của một mạng xã hội đơn giản với hai kiểu quan hệ(relationship type)
Hình 2.9. Mối quan hệ có hướng và kiểu quan hệ
Sử dụng mối quan hệ có hướng và kiểu (type)
What How
người follow Mối quan hệ follows đi ra, độ sâu 1
Người được follow Mối quan hệ follows đi vào, độ sâu 1
Người block Mối quan hệ block đi ra, độ sâu 1
Người được block Mối quan hệ block đi vào, độ sâu 1
Ví dụ sau là một mô hình đơn giản của hệ thông tập tin:
HVTH: Nguyễn Thành Đệ Trang: 10
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
Hình 2.10. Đồ thị và kiểu quan hệ
Để tìm kiếm file nào đó, chúng ta sử dụng mối quan hệ có hướng và kiểu của nút để
duyệt.
What How
Lấy đường dẫn của tập tin Mối quan hệ tập tin đi vào
Lấy toàn bộ đường dẫn của tập tin Mối quan hệ tập tin và symbolic link đi
vào
Lấy tất cả các tập tin trong một thư mục Mối quan hệ tập tin và symbolic link đi ra,
độ sâu 1
Lấy tất cả các tập tin trong thư mục và
chạy liên kết

Char 16-bit unsigned integers u0000 to uffff (0 to 65535)
String Chuỗi các ký tự Unicode
2.4. Đường kết nối (Paths)
Một đường kết nối có thể qua nhiều nút với việc kết nối qua các mối quan hệ, thông
thường là một truy vấn hay kết quả phép duyệt
Đường kết nối ngắn nhất có độ dài bằng 0, là độ thì có một nút. Độ dài của đường dẫn:

HVTH: Nguyễn Thành Đệ Trang: 13
Nút 1
Nút 2
Mối quan hệ 1
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
2.5. Duyệt đồ thị
Duyệt đồ thị có nghĩa là viến thăm các nút, những mối quan hệ theo một số luật.
Hầu như các trường hợp chỉ là một đồ thị con được viến thăm. Như bạn đã biết mối
quan tâm lớn nhất của đồ thị là nút và mối quan hệ của nút.
Neo4j cung cấp cho chúng ta API mà cho phép chúng ta duyệt đồ thị theo nhiều phép
duyệt khác nhau. Chúng ta có thể duyệt theo chiều rộng, duyệt theo chiều sâu.
Neo4j cung cấp một framework Java API cho duyệt đồ thị, framework Java API này có
thể tham khảo ở địa chỉ www.neo4j.org. Ngoài ra cũng có lựa chọn khác ở Neo4j cho
phép duyệt đồ thị hoặc truy vấn đồ thị đó là Cypher và Grelin.
CHƯƠNG 3. FRAMEWORK NEO4J ĐỂ DUYỆT ĐỒ THỊ
Gói Neo4j Traversal API cung cấp ở địa chỉ:
/>ge-summary.html
3.1. Những khái niệm:
Sau đây là một số khái niệm:
- Expanders: Định nghĩa những gì sẽ duyệt, đặc biệt trong những mối quan hệ có
hướng và kiểu
- Order: Ví dụ như duyệt chiều sâu-chiều rộng
- Uniqueness: Thăm nút (Mối quan hệ, đường kết nối) chỉ một lần

Báo cáo chuyên đề cơ sở dữ liệu nâng cao
- Giảm hiệu năng cho việc đọc.
- Hiệu năng thấp khi thêm dữ liệu
- Quá nhiều không gian lãng phí
- Tin cậy vào Store procedured
Trong Neo4j có những qui tắt lưu trữ khá đơn giản. Trong trường hợp này, chúng ta sử
dụng mối quan hệ PART_OF(hình 4.1) đến các nhóm phân cấp và quan hệ
MEMBER_OF(hình 4.1) đến mô hình thành viên trong những nhóm. Chúng ta cũng
kết nối những nhóm mức độ cao nhất đến những nút tham chiếu bởi quan hệ ROOT.
Điều này giúp chúng ta có được sự phân chia hữu ích của đồ thị. Neo4j không có
những kiểu quan hệ(relationship type) được xác định trước, bạn có thể tự do tạo bất kỳ
kiểu quan hệ và gán cho chúng bất kỳ ngữ nghĩa nếu bạn muốn.
4.1.1. Lấy thông tin admins
Node admins = getNodeByName( "Admins" );
Traverser traverser = admins.traverse(
Traverser.Order.BREADTH_FIRST,
StopEvaluator.END_OF_GRAPH,
ReturnableEvaluator.ALL_BUT_START_NODE,
RoleRels.PART_OF, Direction.INCOMING,
RoleRels.MEMBER_OF, Direction.INCOMING );
Kết quả xuất ra:
Found: Ali at depth: 0
Found: HelpDesk at depth: 0
Found: Engin at depth: 1
Found: Demet at depth: 1
Kết quả thu thập từ phép duyệt sử dụng đoạn mã này:
HVTH: Nguyễn Thành Đệ Trang: 17
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
String output = "";
for ( Node node : traverser )

Node referenceNode = getNodeByName( "Reference_Node") ;
traverser = referenceNode.traverse(
Traverser.Order.BREADTH_FIRST,
StopEvaluator.END_OF_GRAPH,
ReturnableEvaluator.ALL_BUT_START_NODE,
RoleRels.ROOT, Direction.INCOMING,
HVTH: Nguyễn Thành Đệ Trang: 19
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
RoleRels.PART_OF, Direction.INCOMING );
Kết quả:
Found: Admins at depth: 0
Found: Users at depth: 0
Found: HelpDesk at depth: 1
Found: Managers at depth: 1
Found: Technicians at depth: 1
Found: ABCTechnicians at depth: 2
Trong Cypher:
START refNode=node(16)
MATCH refNode<-[:ROOT]->()<-[:PART_OF*0 ]-group
RETURN group.name
4.1.4. Lấy ra tất cả thành viên của tất cả các nhóm
Trong java:
traverser = referenceNode.traverse(
Traverser.Order.BREADTH_FIRST,
StopEvaluator.END_OF_GRAPH,
HVTH: Nguyễn Thành Đệ Trang: 20
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
new ReturnableEvaluator()
{
@Override

MATCH refNode<-[:ROOT]->root, p=root<-[PART_OF*0 ]-()<-[:MEMBER_OF]-
user
RETURN user.name, min(length(p))
ORDER BY min(length(p)), user.name
Và kết quả:
4.2. Cấu trúc ACL trong đồ thị
HVTH: Nguyễn Thành Đệ Trang: 22
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
Ví dụ này cho ta một cái nhìn tổng quát của hướng tiếp cận danh sách điều
khiển truy cập(Access Control Lists) trong đồ thị và đơn giản hóa những câu truy vấn
phức tạp.
4.2.1. Hướng tiếp cận tổng quát:
Trong nhiều kịch bản, một ứng dụng cần phải xử lý bảo mật trên một vài hình
thức của đối tượng quản lý. Ví dụ này mô tả một mẫu để xử lý điều này thông qua việc
sử dụng cấu trúc đồ thị và phép duyệt đồ thị mà xây dựng một cơ cấu cấp phép đầy đủ
cho bất kỳ một đối tượng quản lý với khả năng ghi đè hoặc loại trừ chúng. Chức năng
này được xây dựng động của ACLs dựa trên vị trí và ngữ cảnh của đối tượng.
Kết quả là một mô hình an ninh phức tạp mà có thể dễ dàng được cài trong cấu trúc đồ
thị. Hỗ trợ chỉnh sửa cấp phép. Thành phần nội dung và dữ liệu, đảm bảo dữ liệu không
trùng bất kỳ nơi nào.
HVTH: Nguyễn Thành Đệ Trang: 23
Báo cáo chuyên đề cơ sở dữ liệu nâng cao
Hình 4.2. Ví dụ về ACL
Kỹ thuật
- Như đã thấy trong ví dụ trên: Có một vài khái niệm khóa trong mô hình này
- Quản lý nội dung(tập tin, thư mục) được kết nối bằng mối quan hệ
HAS_CHILD_CONTENT
- Cây con Principal chỉ ra principal mà có thể hành động bằng thành viện ACL,
chỉ ra bởi mối quan hệ PRINCIPAL
- Tập hợp principals vào trong những nhóm, được kết nối bằng mối quan hệ

principals” +W +R ->11
3. “Home” không có mối quan hệ SECURITY, và tiếp tục.
4. “user1 Home” có quan hệ SECURITY, đầu tiên cấp quyền "Regular Users" (-R
-W) → 00, sau đó "user 1" (+R +W) → 11.
5. Nút mục tiêu là "My File.pdf" không có quan hệ SECURITY. Vì thế cấp quyền
cho “user 1” trên “My File.pdf” là ReadWrite->11
4.2.2. Ví dụ quyền đọc
Trong ví dụ này, chúng ta sẽ kiểm tra một cấu trúc cây directories và files. Có
những file của users tạo và có những qui tắc mà users có thể được gán. Những qui tắc
có thể là quyền truy cập đến directories hoặc files (và ở đây mô hình của chúng ta là có
thể đọc ).
Tìm tất cả các files trong directories
Lệnh để tìm các files chứa trong cấu trúc directories này, chúng ta cần có một biến
để chứa tất cả mối quan hệ và thông tin nút đến nút lá.
HVTH: Nguyễn Thành Đệ Trang: 25

Trích đoạn Chú ý chuỗi đặc biệt trong Cypher
Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status