Đặt vấn đề và bài toán nghiên cứu 1.1 Vấn đề cần giải quyết trong study case Các bài toán mà nhóm tìm hiểu trong đồ án này liên quan đến việc quản lý và phân tích dữ liệu phức tạp trong nhiều lĩnh vực khác nhau, đặc biệt là khi có nhiều mối quan hệ phức tạp giữa các thực thể. Chúng yêu cầu một hệ thống có khả năng xử lý dữ liệu lớn và thực hiện các truy vấn phức tạp về các mối quan hệ này một cách nhanh chóng và hiệu quả.2 Bối cảnh và lý do chọn Neo4j để giải quyết bài toán này Trong bối cảnh dữ liệu ngày càng phát triển và phức tạp, việc quản lý và phân tích các mối quan hệ giữa các thực thể trở thành một thách thức lớn đối với các hệ thống cơ sở dữ liệu truyền thống, đặc biệt là trong các ứng dụng yêu cầu xử lý mối quan hệ phức tạp như mạng xã hội, phát hiện gian lận, hoặc các hệ thống đề xuất. Các cơ sở dữ liệu quan hệ truyền thống, mặc dù mạnh mẽ trong các phép tính tổng hợp và xử lý dữ liệu có cấu trúc, lại gặp khó khăn khi phải quản lý các mối quan hệ phức tạp hoặc khi các truy vấn đòi hỏi tính linh hoạt và tốc độ xử lý nhanh. Trong khi đó, cơ sở dữ liệu đồ thị, đặc biệt là Neo4j, đã nổi lên như một giải pháp ưu việt trong việc giải quyết các vấn đề này.
Neo4j sử dụng mô hình đồ thị, nơi dữ liệu được biểu diễn dưới dạng các đỉnh và cạnh, giúp dễ dàng mô hình hóa các mối quan hệ phức tạp giữa các thực thể. Đặc biệt, Neo4j hỗ trợ khả năng xử lý các mối quan hệ nhiều chiều, cho phép thực hiện các truy vấn về các mối quan hệ phức tạp một cách nhanh chóng mà không cần thực hiện các phép nối phức tạp như trong các hệ quản trị cơ sở dữ liệu quan hệ. Điều này giúp tăng cường hiệu suất và giảm độ phức tạp trong việc xử lý dữ liệu có liên kết chặt chẽ. Với khả năng mở rộng linh hoạt và hiệu suất cao, Neo4j là lựa chọn lý tưởng để giải quyết các bài toán phân tích mạng lưới và dữ liệu phức tạp trong thời gian thực.
Cơ sở dữ liệu đồ thị này đặc biệt phù hợp với các hệ thống yêu cầu tối ưu hóa các mối quan hệ và xử lý dữ liệu lớn, giúp doanh nghiệp và tổ chức dễ dàng đưa ra quyết định nhanh chóng và chính xác.5 Mục tiêu của đồ án Từ những gì đã khái quát ở trên, nhóm đặt ra các mục tiêu cho đồ án như sau: • Tìm hiểu chung về Neo4j: đặc trưng, kiến trúc, tính năng cốt lõi, ứng dụng thực tiễn • Hiểu được vai trò và ý nghĩa của cơ sở dữ liệu đồ thị nói chung và Neo4j nói riêng • Thực hành với ngôn ngữ Cypher – ngôn ngữ truy vấn cho cơ sở dữ liệu đồ thị • Có thể so sánh Neo4j với một số cơ sở dữ liệu khác như Draph hoặc các cơ sở dữ liệu quan hệ 5 2 Các đặc trưng của Neo4j 2.1 Tổng quan về Neo4j 2.1 Lịch sử phát triển của Neo4j và sự phổ biến của nó trong lĩnh vực cơ sở dữ liệu đồ thị Neo4j ra đời vào năm 2007 bởi Neo Technology (nay là Neo4j, Inc.) [ 9], trở thành cơ sở dữ liệu đồ thị đầu tiên trên thị trường. Từ khi ra mắt, Neo4j đã phát triển thành một hệ sinh thái phong phú gồm các công cụ, ứng dụng và thư viện. Hệ sinh thái này cho phép tích hợp các công nghệ đồ thị với môi trường làm việc của mình [10]. Trong thời đại hiện nay, Neo4j nổi bật với khả năng xử lý và lưu trữ dữ liệu dựa trên mô hình đồ thị, hỗ trợ các ứng dụng yêu cầu cấu trúc dữ liệu linh hoạt và có khả năng liên kết sâu sắc, chẳng hạn như phân tích mạng lưới, khoa học dữ liệu, và Trí tuệ nhân tạo.
Neo4j trở nên phổ biến vì sự tối ưu trong quản lý các mối quan hệ phức tạp, đặc biệt trong khi các cơ sở dữ liệu quan hệ truyền thống khó có thể xử lý các liên kết sâu với hiệu suất cao.2 Các ứng dụng phổ biến của Neo4j trong công nghiệp Neo4j được ứng dụng rộng rãi trong các ngành yêu cầu phân tích mạng lưới hoặc các cấu trúc phức hợp, như: • Phát hiện gian lận [11]: Đặc biệt hiệu quả trong phát hiện giao dịch bất thường qua phân tích các mẫu liên kết. • Quản lý chuỗi cung ứng [12]: Theo dõi chuỗi cung ứng và tối ưu hóa mạng lưới logistics. • Mạng xã hội [13]: Mô hình hóa quan hệ giữa người dùng, sở thích, và tương tác. • Đề xuất sản phẩm [14]: Tạo các gợi ý sản phẩm cá nhân hóa dựa trên các mạng lưới sở thích.3 Quy trình hoạt động của Neo4j 2.1 Cách Neo4j quản lý và xử lý dữ liệu đồ thị Neo4j lưu trữ dữ liệu đồ thị theo dạng các nút (nodes), quan hệ (relationships), và thuộc tính (properties).
Các nút và quan hệ đều được phân loại theo nhãn (label), giúp truy vấn và lọc dữ liệu hiệu quả hơn. Bằng cách sử dụng bộ nhớ đệm cho các thao tác truy vấn, Neo4j tối ưu hiệu suất xử lý ngay cả khi làm việc với đồ thị phức tạp.2 Cơ chế vận hành của Neo4j từ khi nhận truy vấn đến khi trả về kết quả Khi một truy vấn Cypher được gửi đến, Neo4j tiến hành phân tích cú pháp truy vấn, sau đó tạo kế hoạch thực thi tối ưu. Sau khi truy vấn được chạy, Neo4j trả về kết quả cho người dùng. Cơ chế này tối ưu cho các truy vấn đồ thị phức tạp, giúp giảm thiểu thời gian và tài nguyên hệ thống.2 Đặc điểm chính của Neo4j 2.1 Ngôn ngữ truy vấn Cypher: cú pháp và đặc trưng Cypher là ngôn ngữ truy vấn của Neo4j, được thiết kế nhằm với cú pháp dễ đọc dễ hiểu, gần gũi với ngôn ngữ tự nhiên.
Cypher cho phép truy vấn các mối quan hệ và phân tích dữ liệu một cách trực quan. Điểm đặc biệt của Cypher là cú pháp hình mẫu ( MATCH, RETURN, CREATE, MERGE, v.), tối ưu hóa việc truy vấn mạng lưới so với SQL trong các cơ sở dữ liệu quan hệ, và nó trở thành ngôn ngữ truy vấn tiêu chuẩn cho nhiều cơ sở dữ liệu đồ thị khác [15]. 1 (:nodes)-[:ARE_CONNECTED_TO]->(:otherNodes) 6 Trên đây là ví dụ về một pattern trong Cypher, trong đó dấu ngoặc tròn đại diện cho Node, dấu ngoặc vuông đại diện cho các relationships đi kèm với tính vô hướng/có hướng thông qua dấu gạch ngang và dấu lớn/bé. Một pattern có thể linh hoạt hơn so với cấu trúc bên trên, chẳng hạn như có thể thêm thuộc tính trong nút để tìm kiếm hoặc tạo nút với điều kiện nhất định, ví dụ: 1 (:Person {name: 'Alice' , a ge : 3 0} ) hoặc kết hợp nhiều nút và quan hệ phức tạp để mô hình hóa liên kết sâu hơn, chẳng hạn: 1 (:Person {name: 'Alice' })-[:KNOWS]->(:Person {name: 'Bob'})-[:LIVES_IN]->(:City {name: 'New York' }) Thể hiện thông tin những người (Person) có tên là ’Alice’ biết người có tên là Bob sống ở thành phố New York.
Câu truy vấn Cypher là sự kết hợp giữa các hình mẫu với pattern, chẳng hạn như: 1 MATCH (p:Person {name: 'Alice' })-[:KNOWS]->(:Person {name: 'Bob' })-[:LIVES_IN]->(:City {name: 'New York'}) 2 RETURN p Có nghĩa là trả về những Node p (có label là Person, có thuộc tính name là ’Alice’) biết người có tên là ’Bob’ sống ở thành phố New York.2 Chức năng và yếu tố quan trọng 2.1 Khả năng xử lý các truy vấn phức tạp (Graph Traversal) Neo4j nổi bật nhờ khả năng xử lý các truy vấn phức tạp thông qua quá trình ”traverse” mạng lưới. Các thuật toán như Dijkstra, Breadth-First Search (BFS), và Depth-First Search (DFS) giúp tăng tốc độ xử lý và tối ưu hóa các truy vấn, đặc biệt khi cần truy vấn qua nhiều tầng quan hệ.2 ACID compliance và tính toàn vẹn dữ liệu [16] Neo4j đảm bảo các thuộc tính ACID (Atom- icity, Consistency, Isolation, Durability) để giữ tính toàn vẹn dữ liệu. Đối với hệ thống cơ sở dữ liệu đồ thị, tuân thủ ACID là một ưu điểm vì giúp đảm bảo mỗi thao tác cập nhật hoặc truy vấn đều diễn ra một cách nhất quán và an toàn, giảm thiểu rủi ro dữ liệu hỏng hoặc không đồng nhất.3 Khả năng mở rộng Neo4j cung cấp khả năng mở rộng đáng kể theo chiều ngang (Horizontal Scaling) [17]: • Sharding: Neo4j có thể không lưu toàn bộ dữ liệu trên một máy mà phân chia thành nhiều mảnh nhỏ (shards), giúp hệ thống có thể quản lý lượng dữ liệu cực lớn. • Autonomous Clustering: Khi số lượng truy vấn lên cơ sở dữ liệu tăng lên, Neo4j hỗ trợ kiến trúc cho phép tự động khởi tạo các phiên bản copies đến các máy chủ tối ưu dựa trên những yêu cầu hệ thống và nghiệp vụ đã cài đặt từ trước.
Qua đó giúp tối ưu quá trình truy vấn dữ liệu. • Composite Database: Dựa vào kiến trúc Fabric, Neo4j có thể kết hợp các shards lại với nhau để quản lý.3 Lợi ích Neo4j là công cụ mạnh mẽ cho các ứng dụng yêu cầu phân tích mối quan hệ phức tạp, với khả năng mở rộng linh hoạt và hiệu suất vượt trội. Trong các dự án yêu cầu truy vấn nhanh và mở rộng dễ dàng, Neo4j là lựa chọn hàng đầu. 7 3 Quy trình thực hiện 3.1 Quy trình triển khai hệ thống 3.1 Thiết lập môi trường làm việc • Chuẩn bị môi trường và yêu cầu hệ thống Yêu cầu phần cứng [18]: Xác định dung lượng và hiệu năng cần thiết để đảm bảo Neo4j vận hành ổn định.
Đối với hệ thống vừa và nhỏ, Neo4j cần tối thiểu 2 CPU, 2GB RAM, và 10GB dung lượng lưu trữ. Tuy nhiên, với dữ liệu lớn hoặc truy vấn phức tạp, dung lượng bộ nhớ và sức mạnh xử lý cần được tăng lên. Yêu cầu phần mềm: Hệ điều hành hỗ trợ bao gồm Windows, macOS, và Linux. Neo4j cũng yêu cầu Java (thường là JDK 11 trở lên).
Đảm bảo cài đặt và cấu hình môi trường Java để Neo4j có thể hoạt động chính xác. • Cài đặt và cấu hình Neo4j Tải và cài đặt Neo4j: Truy cập trang chủ Neo4j và chọn phiên bản phù hợp. Neo4j cung cấp hai phiên bản chính [19]: – Community Edition: Miễn phí, phù hợp cho dự án nhỏ hoặc cá nhân. – Enterprise Edition: Có phí, cung cấp thêm các tính năng bảo mật và tối ưu hóa nâng cao cho doanh nghiệp.
Thiết lập cấu hình ban đầu [20]: Trong tệp cấu hình neo4j.conf, có thể điều chỉnh các thông số quan trọng như cổng kết nối ( dbms.listen_address), số lượng bộ nhớ tối đa (dbms.max_size), và các tùy chọn bảo mật khác.