Hadoop
Các thành phần trong hệ sinh thái hadoop
I.1 Mô tả hệ sinh thái hadoop:
Các thành phần hệ sinh thái Hadoop gồm các thành phần HDFS và HDFS, MapReduce, Yarn, Hive Pig, Apache Hbase và các thành phần HBASE, HCATALOG, AVRO, Thrift, Drill, Apache Mahout, Sqoop Flume, Ambari, ZooKeeper và Apache Oozie để lặn sâu vào Hadoop dữ liệu lớn và để có được kiến thức về cấp độ thạc sĩ về hệ sinh thái Hadoop.
I.2 Các thành phần trong hệ sinh thái hadoop:
HDFS components: Có hai thành phần chính của Hadoop HDFS- Namenode và DataNode
NameNode: Namenode không lưu trữ dữ liệu thực tế hoặc bộ dữ liệu. Namenode lưu trữ siêu dữ liệu I.E.Nó bao gồm các tập tin và thư mục.
Nhiệm vụ của HDFS namenode:
+ Quản lý không gian tên hệ thống tập tin.
+ Điều chỉnh quyền truy cập của khách hàng vào các tệp.
+ Thực hiện các lần thực hiện hệ thống tệp như đặt tên, đóng, mở tệp và thư mục.
DataNode: HDFS Datanode chịu trách nhiệm lưu trữ dữ liệu thực tế trong HDFS Datanode thực hiện thao tác đọc và viết theo yêu cầu của khách hàng.
Nhiệm vụ của HDFS dataNode:
+ Datanode thực hiện các hoạt động như tạo bản sao, xóa và sao chép theo hướng dẫn của Namenode.
+ Datanode quản lý lưu trữ dữ liệu của hệ thống.
Là thành phần hệ sinh thái Hadoop cốt lõi cung cấp xử lý dữ liệu
Công việc của Mapreduce: Thực hiên qua 2 giai đoạn:
Map phase: Từ một bộ dữ liệu và chuyển đổi nó thành một bộ dữ liệu khác, trong đó các phần tử riêng lẻ được chia thành các bộ dữ liệu (cặp khóa / giá trị)
Pha giảm: Lấy kết quả từ map làm input và join các bộ dữ liệu đó dựa theo key và sửa giá trị theo key đó.
Các chức năng của mapreduce:
Simplicity : có thể được viết bằng bất kỳ ngôn ngữ nào như java,C+ + và python
Scalability: có thể xử lý Petabyte dữ liệu
Speed: Bằng cách xử lý song song các vấn đề mất nhiều ngày để giải quyết.
Fault Tolerance: Nếu một bản sao dữ liệu không khả dụng, một máy khác có một bản sao của cùng một cặp khóa có thể được sử dụng để giải quyết cùng một tệp con.
Là một thành phần hệ sinh thái hadoop cung cấp quản lý tài nguyên
Các chức năng chính của YARN:
Tính linh hoạt : Cho phép các mô hình xử lý dữ liệu được xây dựng có mục đích khác ngoài MapReduce (Batch)
Hiệu quả : Khi nhiều ứng dụng chạy trên cùng một cụm, do đó, hiệu quả của Hadoop tăng mà không ảnh hưởng nhiều đến chất lượng dịch vụ.
Chia sẻ - cung cấp một nền tảng ổn định, đáng tin cậy, an toàn
Apache Hive là một hệ thống kho dữ liệu mã nguồn mở nằm trong hệ sinh thái Hadoop Hive cho phép người dùng truy vấn và phân tích các bộ dữ liệu lớn được lưu trữ trên tệp Hadoop.
Do ba chức năng chính:
Apache Pig là một nền tảng ngôn ngữ cấp cao để phân tích và truy vấn bộ dữ liệu lớn được lưu trữ trong HDFS Các tính năng của Pig Apache:
Xử lý tất cả các loại dữ liệu
Một cơ sở dữ liệu phân tán được thiết kế để lưu trữ dữ liệu có cấu trúc trong các bảng có thể có hàng tỷ hàng và hàng triệu cột.
Các thành phần của Hbase:
1.2.7 Hcatalog: Đó là một lớp quản lý bảng và các lớp cho Hadoop.
Cho phép thông báo về tính khả dụng của dữ liệu.
Với việc trừu tượng bảng, hcatalog giải phóng người dùng khỏi phần lưu trữ dữ liệu.
Cung cấp khả năng hiển thị để làm sạch dữ liệu và các công cụ lưu trữ.
Là một hệ thống tuần tự hóa dữ liệu phổ biến nhất, Avro là một dự án nguồn mở cung cấp dịch vụ trao đổi dữ liệu và dịch vụ trao đổi dữ liệu cho Hadoop.
Nó là một khung phần mềm cho phát triển dịch vụ ngôn ngữ chéo có thể mở rộng. Thrift là một ngôn ngữ định nghĩa giao diện cho RPC (Cuộc gọi thủ tục từ xa)
Mục đích chính của thành phần hệ sinh thái Hadoop là xử lý dữ liệu quy mô lớn bao gồm dữ liệu có cấu trúc và bán cấu trúc.
Mahout là một nền tảng nguồn mở để xây dựng các thuật toán học máy có thể mở rộng và thư viện khai thác dữ liệu Sau khi dữ liệu được lưu trữ trên Hadoop HDFS, Mahout cung cấp các công cụ khoa học dữ liệu để tự động tìm kiếm các mẫu có ý nghĩa trong các bộ dữ liệu lớn đó.
Flume thu thập hiệu quả, tổng hợp và di chuyển một lượng lớn dữ liệu từ nguồn gốc của nó và gửi lại cho HDFS
Một thành phần hệ sinh thái hashop khác, là một nền tảng quản lý để cung cấp, quản lý, giám sát và bảo mật cụm Hadoop Apache
Một dịch vụ tập trung và là một thành phần của Hệ sinh thái Hadoop để duy trì thông tin cấu hình, đặt tên, cung cấp đồng bộ hóa phân tán và cung cấp các dịch vụ nhóm Zookeeper quản lý và điều phối một cụm máy lớn.
Một hệ thống lập lịch trình quy trình làm việc để quản lý các công việc apacheHadoop Oozie kết hợp nhiều công việc tuần tự thành một đơn vị công việc hợp lý Khung công tác Oozie được tích hợp đầy đủ với ngăn xếp Hadoop apache, YARN như một trung tâm kiến trúc và hỗ trợ các công việc Hadoop cho apache MapReduce,Pig, Hive và Sqoop.
Cài đặt Hadoop Eco System
- Login với vai trò root (pass: root) để thực hiện những công việc sau
1.3.1 Thiết lập IP tĩnh cho master
- In trạng thái của từng địa chỉ IP trên hệ thống
# vim /etc/netplan/00-installer-config.yaml
- Thêm vào các nội dung sau
- Lưu file và chạy lệnh sau để lưu cấu hình mới
- Quản lý phiên bản Java (chọn phiên bản Oracle Manual Mode)
# apt install openssh-server // Để cài đặt gói máy chủ openssh
# vim /etc/ssh/sshd_config : Sửa lại như ảnh
Kiểm tra ip của các máy master, slave
- Nhấn phím i để chuyển sang chế độ insert, bổ sung thêm 2 host master và slave như sau: 192.168.59.1 thanhquang-master
Cài đặt hostname cho master (thực hiện trên máy master)
#thanhquang-master // tên ở máy server
- Trong file này sẽ xuất hiện hostname mặc định của máy, xóa đi và đổi thành master
Cài đặt hostname cho slave (thực hiện trên máy slave)
- Trong file này sẽ xuất hiện hostname mặc định của máy, xóa đi và đổi thành
- Tạo user hadoopuser để quản lý các permission cho đơn giản
1.3.7 Cấu hình các thông số cho Hadoop
# vim ~/.bashrc// biến môi trường sử dụng
# vim ~/hadoop/etc/hadoop/hadoop-env.sh
File mapred-site (chỉ cấu hình ở master)
# vim ~/hadoop/etc/hadoop/hdfs-site.xml
File yarn-site.xml quản lý các tiến trình tài nguyên của cluster
- Chuyển đến thư mục ~/hadoop/hadoop-yarn-project/hadoop-yarn/conf
# vim ~/hadoop/etc/hadoop/yarn-site.xml
1.3.8 Chỉ ra các máy slaves (chỉ cấu hình ở master)
# vim ~/hadoop/etc/hadoop/workers
Thêm hostname của các máy slave: mỗi máy salve đặt trên 1 dòng
- Copy master ra, đổi tên thành slave
- Mở máy slave, chỉnh lại IP tĩnh và các thông số cho phù hợp: hosts, hostname…
- Lưu ý: o Một số lệnh cần phải có quyền root mới thực hiện được.
1.3.10 Cài đặt ssh key giữa các node
Thao tác này chỉ thực hiện trên master
- Nhấn Enter để chấp nhận giá trị mặc định
# cat /home/hadoopuser/.ssh/id_rsa.pub >> /home/hadoopuser/.ssh/authorized_keys
# Để thêm SSH Public key mới tạo vào máy chủ
# chmod 600 /home/hadoopuser/.ssh/authorized_keys : chủ sở hữu đọc và ghi
- Share ssh key giữa master - master
# ssh-copy-id -i ~/.ssh/id_rsa.pub thanhquang-master
- Share ssh key giữa master - slave
# ssh-copy-id -i ~/.ssh/id_rsa.pub thanhquang-slave
- Test kết nối tới master
- Test kết nối tới slave
- Thao tác này chỉ thực hiện trên master và chỉ làm 1 lần.
- Cập nhật lại các thông tin cấu hình của master
1.3.13 Kiểm tra xem mọi thứ đã ổn
- Trên master chúng ta chạy lệnh sau để khởi động các thành phần có trong Hadoop
- Kiểm tra các thành phần có chạy đủ bằng lệnh sau
- Nếu xuất hiện output dạng như sau thì có nghĩa là các thành phần đã chạy đủ
- cung cấp trạng thái của deamon chạy cụm Hadoop Nó cung cấp đầu ra để cập đến trạng thái của : datanode , namenode , Secondary namenode:
- Kiểm tra các máy slave còn hoạt động hay không
- Ra thư mục gốc, tạo file test
- Tạo nội dung như sau
Giải thích: Test trên sẽ tạo ra 2 file file2.txt và file1.txt có nội dung lần lượt là Hello World và Hello Hadoop 2 file này lần lượt được đưa vào trong HDFS, sau đó sẽ chạy một job có nhiệm vụ đếm số lần xuất của hiện của mỗi từ có trong file1.txt và file2.txt.
- Chạy xong mà nhận được kết quả dạng như bên dưới là mọi thứ OK.
- Trong trường hợp bạn muốn test lại thì phải xóa kết quả cũ bằng lệnh sau
# hadoop fs -rm -r output rồi chạy lại lệnh
NoSQL
NoSQL(NoSQL Database) là gì?
Suốt nhiều thập kỉ, mô hình dữ liệu quan hệ thống trị trong phát triển ứng dụng và thường được sử dụng trong các cơ sở dữ liệu quan hệ Cuối những năm 2000, các mô hình dữ liệu khác dần trở nên phổ biến hơn Để phân biệt những cơ sở dữ liệu và mô hình dữ liệu mới này, thuật ngữ "NoSQL" được ra đời, tương đương với "phi quan hệ" Cơ sở dữ liệu NoSQL được thiết kế dành riêng cho mô hình dữ liệu, có cấu trúc linh hoạt để xây dựng ứng dụng hiện đại, dữ liệu lớn và ứng dụng nền web thời gian thực Chúng được đánh giá cao về khả năng dễ phát triển, chức năng và hiệu suất ở quy mô lớn.
"Not only SQL" (không chỉ là SQL) để nhấn mạnh rằng chúng có thể hỗ trợ các ngôn ngữ truy vấn dạng như SQL.
Tại sao lại cần NoSQL?
Sở dĩ người ta phát triển NoSQL xuất phát từ tính đơn giản trong thiết kế, mở rộng theo
"chiều ngang" cho các cụm máy đơn giản hơn và kiểm soát tính khả dụng tốt hơn và hơn nữa yêu cầu cần những database có khả năng lưu trữ dữ liệu với lượng cực lớn, truy vấn dữ liệu với tốc độ cao mà không đòi hỏi quá nhiều về năng lực phần cứng cũng như tài nguyên hệ thống và tăng khả năng chịu lỗi.
Cấu trúc dữ liệu được thiết kế cho các cơ sở dữ liệu NoSQL khác với cấu trúc dữ liệu được sử dụng mặc định trong các cơ sở dữ liệu quan hệ, khiến cho nó thao tác nhanh hơn trong NoSQL.
Cơ sở dữ liệu NoSQL thích hợp với từng trường hợp cụ thể cho vấn đề mà nó phải giải quyết Đôi khi cấu trúc dữ liệu thiết kế dưới dạng NoSQL được xem là "linh hoạt" hơn các bảng cơ sở dữ liệu kiểu quan hệ.
Các loại NoSQL DB
Document database (ví dụ: CouchDB, MongoDB): Dữ liệu được thêm vào lưu trữ dưới dạng cấu trúc JSON tự do hoặc “tài liệu”, trong đó dữ liệu có thể là bất kỳ kiểu nào, từ số nguyên đến chuỗi hay đến các văn bản tự do.
Ưu điểm: Dùng khi dữ liệu nguồn không được mô tả đầy đủ.
Nhược điểm: Hiệu năng truy vấn, Không có cú pháp chuẩn cho câu truy vấn dữ liệu.
Key-value stores (ví dụ: Redis, Riak): Các giá trị dạng tự do, từ số nguyên hoặc chuỗi đơn giản đến các tài liệu JSON phức tạp, được truy cập trong cơ sở dữ liệu bằng các khóa.
Ưu điểm: Tìm kiếm rất nhanh.
Nhược điểm: Lưu dữ liệu không theo khuôn dạng (schema) nhất định.
Wide column stores (ví dụ: HBase, Cassandra): Dữ liệu được lưu trữ trong các cột thay vì các hàng như trong một hệ thống SQL thông thường Bất kỳ số lượng cột nào (và do đó nhiều loại dữ liệu khác nhau) có thể được nhóm hoặc tổng hợp khi cần cho truy vấn hoặc chế độ xem dữ liệu.
Ưu điểm: Tìm kiếm nhanh, Phân tán dữ liệu tốt.
Nhược điểm: Hỗ trợ được với rất ít phần mềm.
Graph database (ví dụ: Neo4j): Dữ liệu được biểu diễn dưới dạng mạng hoặc đồ thị của các thực thể và các mối quan hệ của thực thể đó, với mỗi node trong biểu đồ là một khối dữ liệu ở dạng tự do.
Ưu điểm: Ứng dụng các thuật toán trên đồ thị như Đường đi ngắn nhất, liên thông,…
Nhược điểm: Phải duyệt nội bộ đồ thị, để trả lời lại các truy vấn Không dễ để phân tán.
So sánh giữa SQL và NoSQL
Lịch sử Được phát triển vào những năm 1970 với làn sóng ứng dụng lưu trữ dữ liệu đầu tiên. Được phát triển vào những năm 2000 để giải quyết các hạn chế của cơ sở dữ liệu SQL, đặc biệt liên quan đến quy mô, nhân rộng và lưu trữ dữ liệu phi cấu trúc.
CSDL đại diện MySQL, Postgres, Oracle Database MongoDB, Cassandra, HBase, Neo4j
Các bản ghi riêng lẻ (ví dụ: "nhân viên") được lưu trữ dưới dạng các hàng trong bảng, với mỗi cột lưu trữ một phần dữ liệu cụ thể về bản ghi đó (ví dụ: "người quản lý", "ngày được thuê" ), giống như một bảng tính Các kiểu dữ liệu riêng biệt được lưu trữ trong các bảng riêng biệt và sau đó được nối với nhau khi các truy vấn phức tạp hơn được thực thi Ví dụ: "văn phòng" có thể được lưu trữ trong một bảng và "nhân viên" trong bảng khác Khi người dùng muốn tìm địa chỉ làm việc của nhân viên, công cụ cơ sở dữ liệu sẽ nối các bảng "nhân viên" và "văn phòng" lại với nhau để có được tất cả thông tin cần thiết.
Khác nhau dựa trên loại cơ sở dữ liệu NoSQL Ví dụ: các key-value store hoạt động tương tự như cơ sở dữ liệu SQL, nhưng chỉ có hai cột ("khóa- key" và "giá trị-value") Document database loại bỏ hoàn toàn mô hình table-and-row, lưu trữ tất cả dữ liệu có liên quan với nhau tại một "tài liệu" duy nhất trong JSON, XML hoặc định dạng khác, có thể lồng các giá trị theo thứ bậc.
Khả Theo chiều dọc, có nghĩa là máy chủ duy nhất phải Theo chiều ngang, có nghĩa là để thêm năng mở rộng ngày càng mạnh mẽ để đáp ứng nhu cầu mở rộng của dữ liệu Có thể mở rộng cơ sở dữ liệu SQL trên nhiều máy chủ, nhưng cần bổ sung thêm kỹ thuật quan trọng. dung lượng, người quản trị cơ sở dữ liệu chỉ cần thêm nhiều máy chủ hoặc đám mây Cơ sở dữ liệu NoSQL tự động phân tán dữ liệu trên các máy chủ khi cần thiết
Kết hợp mã nguồn mở (ví dụ: Postgres, MySQL) và mã nguồn đóng (ví dụ: Cơ sở dữ liệu Oracle) Mã nguồn mở
Ngôn ngữ cụ thể bằng cách sử dụng các câu lệnh
Ví dụ: SELECT fields FROM table WHERE…
Thông qua các API hướng đối tượng
Có tính nhất quán mạnh mẽ
Phụ thuộc vào hệ thống Có hệ thống ưu tiên cung cấp tính nhất quán (ví dụ: MongoDB) trong khi một số khác cung cấp tính nhất quán cuối cùng (ví dụ: Cassandra)
Cấu trúc và kiểu dữ liệu được cố định trước Để lưu trữ thông tin về một mục dữ liệu mới, toàn bộ cơ sở dữ liệu phải được thay đổi, trong thời gian đó cơ sở dữ liệu phải được ngoại tuyến.
Các bản ghi có thể thêm thông tin mới một cách nhanh chóng, không giống như các hàng trong bảng SQL, dữ liệu khác nhau có thể được lưu trữ cùng nhau khi cần thiết Đối với một số cơ sở dữ liệu việc thêm các trường mới một cách linh hoạt sẽ khó khăn hơn.
Truy vấn cơ sở dữ liệu NoSQL
Mỗi cơ sở dữ liệu NoSQL có cú pháp riêng để truy vấn và quản lý dữ liệu Ví dụ,
CouchDB sử dụng các yêu cầu dưới dạng JSON, được gửi qua HTTP, để tạo hoặc truy xuất tài liệu từ cơ sở dữ liệu của nó MongoDB gửi các đối tượng JSON qua giao thức nhị phân, bằng giao diện dòng lệnh hoặc thư viện ngôn ngữ.
Một số công cụ NoSQL có thể sử dụng cú pháp giống SQL để xử lý dữ liệu, nhưng với phạm vi giới hạn Ví dụ, Apache Cassandra, một cơ sở dữ liệu lưu trữ cột, cung cấp Ngôn ngữ Truy vấn Cassandra như một dạng ngôn ngữ tương tự SQL.
(Cassandra Query Language - CQL) Một số cú pháp CQL nằm ngoài SQL, như các từ khóa SELECT hoặc INSERT, nhưng không có cách nào để thực hiện JOIN hoặc subquery trong Cassandra.
Những hạn chế của NoSQL
Ngay cả khi bạn lấy dữ liệu ở dạng tự do, bạn hầu như luôn cần áp đặt các ràng buộc để làm cho nó hữu ích Với NoSQL, trách nhiệm sẽ được chuyển từ cơ sở dữ liệu sang nhà phát triển ứng dụng Ví dụ, nhà phát triển có thể áp đặt cấu trúc thông qua một hệ thống map đối tượng quan hệ hoặc ORM Nhưng nếu bạn muốn lược đồ tự dữ liệu, NoSQL thường sẽ không hỗ trợ.
Một số giải pháp NoSQL cung cấp các cơ chế xác thực và nhập dữ liệu tùy chọn. Chẳng hạn, Apache Cassandra có một loạt các kiểu dữ liệu nguyên gốc tương tự các kiểu dữ liệu được tìm thấy trong SQL thông thường.
NoSQL đánh đổi sự nhất quán để ưu tiên tốc độ, hiệu suất hiệu quả hơn Dữ liệu được chèn vào cụm dù thế nào cũng sẽ khả dụng trên toàn bộ hệ thống, nhưng không thể biết chắc chắn khoảng thời gian nào.
Một số cơ sở dữ liệu NoSQL có các cơ chế để khắc phục điều này Chẳng hạn như MongoDB, hệ thống này đảm bảo tính nhất quán cho các hoạt động riêng lẻ, nhưng không phải cho toàn bộ cơ sở dữ liệu Microsoft Azure CosmosDB cho phép bạn chọn mức độ nhất quán cho mỗi yêu cầu, do đó bạn có thể chọn hành vi phù hợp với trường hợp sử dụng của mình.
Hầu hết các hệ thống NoSQL đều tương tự về khái niệm, tuy nhiên, cách thực hiện lại rất khác nhau Mỗi hệ thống sẽ có cơ chế truy vấn dữ liệu và quản lý riêng. Điều này có thể sẽ trở gây ra trở ngại nếu xảy ra các thay đổi hệ thống trong quá trình làm việc.
Ví dụ nếu bạn thay đổi hệ thống từ MongoDB sang CouchDB bạn sẽ phải làm nhiều viêc hơn là chỉ di chuyển dữ liệu Bạn cũng phải điều hướng sự khác biệt trong truy cập dữ liệu và cách thức lập trình, nói cách khác, bạn phải viết lại các phần của ứng dụng truy cập cơ sở dữ liệu.
Một hạn chế khác của NoSQL là yêu cầu về chuyên môn tương đối cao của người dùng Trong khi lĩnh vực SQL đã phát triển, NoSQL vẫn còn khá mới, dẫn đến sự thiếu hụt đáng kể các cá nhân có kỹ năng thành thạo.
Theo thống kê của Truth.com vào cuối năm 2017, khối lượng danh sách công việc cho SQL, thông thường là MySQL MySQL, Microsoft SQL Server, OracleDatabase, cao hơn tổng ba năm với khối lượng công việc cho MongoDB,Couchbase và Cassandra Nhu cầu của NoSQL đang tăng lên, nhưng nó vẫn là một phần nhỏ của thị trường cho SQL.
Tìm hiểu Neo4j
Lịch sử
Phiên bản 1.0 được phát hành vào tháng 2 năm 2010.
Neo4j phiên bản 2.0 được phát hành vào tháng 12 năm 2013.
Neo4j phiên bản 3.0 được phát hành vào tháng 4 năm 2016.
Vào tháng 11 năm 2016 Neo4j đã đảm bảo thành công 36$ triệu trong Tài trợ Series E do One Peak Partners và Morgan Stanley Expansion Capital dẫn đầu, với sự tham gia của các nhà đầu tư khác bao gồm Creandum, Eight Roads vàGreenbridge Partners.
Cấp phép và phiên bản
Neo4j có hai phiên bản Phiên bản Cộng đồng miễn phí nhưng có một số hạn chế như chỉ chạy trên một nút, không phân cụm và không có bản sao lưu nóng Trong khi đó, phiên bản Doanh nghiệp được cấp phép theo GPL v3 hoặc giấy phép thương mại, cung cấp nhiều tính năng hơn, bao gồm phân cụm và bản sao lưu nóng.
Phiên bản doanh nghiệp mở ra những hạn chế này, cho phép phân cụm, sao lưu nóng và giám sát Phiên bản doanh nghiệp có sẵn theo giấy phép Thương mại nguồn đóng.
Đặc điểm
- Biểu diễn mô hình dữ liệu hướng đồ thị một các trực quan.
- Quản lý lưu trữ trên đĩa cứng, hoàn toàn tối ưu cho việc lưu trữ các cấu trúc đồ thị với hiệu năng lớn nhất và có khả năng mở rộng tối đa.
- Neo4j có thể xử lý các đồ thị với hàng tỉ các node/ các mối quan hệ/ các thuộc tính trên 1 máy tính và có thể mở rộng ra trên nhiều máy khác.
- Một framework duyệt mạnh mẽ với tốc độ duyệt trên các node cực nhanh trong không gian node Độ sâu của quá trình duyệt có thể lên đến 1000 mức và dưới tốc độ 1 giây.
- Full transactional như một cơ sở dữ liệu thực sự, với đầy đủ các đặc tính ACID(Atomicity, Consistency, Isolation, Durability).
Kiến trúc của Neo4J
Kiến trúc của Neo4j được mô tả theo hình sau:
Hình 7: Kiến trúc logic của Neo4j
- File system: là các file trên ổ cứng, được lưu trữ cẩn thận để tính toán các offset và tìm đến đến bất kỳ một record nào trong các file một cách nhanh nhất Ta lưu trữ tách biệt các node, các quan hệ và các thuộc tính, và tối ưu trong những trường hợp chung nhấp để đảm bảo dữ liệu được tìm thấy trên 1 file.
- Memory-mapped (N) IO: ta sử dụng java IO cho mục đích nhanh chóng.
Bộ nhớ đệm cho phép làm việc nhanh chóng trên các đĩa quay, giúp xử lý hiệu quả hàng triệu truy vấn mỗi giây ngay cả trên phần cứng của máy tính xách tay CoreAPI là lõi của Neo4j, lưu trữ các cấu trúc đồ thị trừu tượng hiệu suất cao.
- Traversal Framework: tầng truy vấn dữ liệu.
- JVM Language bindings: các thành phần của Java API như Jruby, Jython, Scala,
Nodes
Đơn vị chủ chốt cấu thành nên đồ thị bao gồm các node và các mối quan hệ Các node và mối quan hệ trong Neo4j có thể sở hữu các thuộc tính đi kèm.
Các node thường được dùng để biểu diễn các thuộc tính, phụ thuộc vào miền của các mối quan hệ mà có thể sử dụng cho nhiều mục đích khác nhau. can have can have
Hình 8: Node, relationships và properties
Với một đồ thị đơn giản chỉ chứa 1 node và có thể chỉ chứa 1 thuộc tính
Hình 9: Ví dụ về một đồ thị đơn giản với 1 node và 1 propertiesTrong ví dụ trên, đồ thị có 1 thuộc tính tên là “name”, với giá trị là “ Thu”.
Relationships
Trong cơ sở dữ liệu đồ thị, các mối quan hệ giữa các node (relationships) là một phần khóa của cơ sở dữ liệu Chúng cho phép tìm kiếm các dữ liệu có liên quan với nhau Cũng giống như các node, các relationships cũng có tập các thuộc tính. has a has a has a can have uniquely identified by
Start node End node Relationships type Properties
Hình 10: Relationships và các quan hệ liên quan
Một relationship kết nối 2 node với nhau, gồm node bắt đầu và node kết thúc Mỗi relationship có loại quan hệ “relationship type”, mỗi “relationship type” này được xác định bởi một định danh duy nhất Một relationship có tập các thuộc tính với các giá trị của các thuộc tính này.
Một relationship luôn có hướng Chúng biểu diễn quan hệ đầu vào của 1 node, và quan hệ đầu ra của 1 node, dùng cho phép duyệt đồ thị: relationships
Hình 11: Một relationships giữa start node và end node
Hình 12: Quan hệ vào và quan hệ ra của 1 node
Một node cũng có thể tự có quan hệ với chính nó:
Hình 13: Quan hệ trên 1 node
Mặc dù đồ thị luôn có một hướng, nhưng chúng ta có thể bỏ qua hướng của đồ thị trong ứng dụng nhỉ của chúng ta. Để nâng cao hơn phép duyệt đồ thị tất cả các relationships có một “relationship type” có thể được xem là nhãn của một relationship.
Hình 14: Ví dụ một mạng xã hội
Trong mạng xã hội trên, có 2 “relationship type” là “follows” và “blocks”, thể hiện mối quan hệ giữa các node : Maja, Alice, Oscar, và William.
Biểu diễn ý nghĩa các relationships trong mạng xã hội trên trong bảng dưới đây:
Get who a person follows Outgoing follows relationships, depth one
Get the followers of a person Incoming follows relationships, depth one
Get who a person blocks Outgoing blocks relationships, depth one
Get who a person is blocked by Incoming blocks relationships, depth one
Properties
Cả node và relationships đều có tập các thuộc tính (properties).
Properties là cặp key – value (khóa – giá trị) trong đó key có kiểu String (kiểu mô tả này tương tự như kiểu dữ liệu Map trong Java) Các giá trị của property có thể là
1 kiểu nguyên thủy, hoặc một mảng của nhiều kiểu nguyên thủy Ví dụ: kiểu String, kiểu int, hoặc mảng int[].
Properties không chứa giá trị null, nếu một properties có value = null nghĩa là không tồn tại key đó trong tập properties của nodes hay relationships.
Đường đi Paths
Một đường đi là một hay nhiều node được kết nối với nhau bởi các relationships,thường được biểu diễn bằng kết quả của phép duyệt
Has a can contain one has an or more accompanied by a
Hình 16: Path Đường đi ngắn nhất có thể bằng 0 khi đó là đường đi từ 1 node đến chính nó, như hình sau:
Hình 17: Đường đi đến chính node đó bằng 0 Đường đi của một node đến node khác được biểu diễn như sau:
Hình 18: Đường đi từ node 1 đến node 2 có quan hệ relatonship 1
Duyệt đồ thị
Duyệt một đồ thị nghĩa là đi thăm các node của đồ thị đó, dựa trên các relationships giữa các node theo một số quy tắc Trong một số trường, chỉ có một đồ thị con được thăm.
Có 2 cách duyệt đồ thị cơ bản là duyệt theo chiều rộng và duyệt theo chiều sâu Thông thường ta duyệt đồ thị bằng cách sử dụng thuật toán Djikstra để tìm đường đi ngắn nhất từ đỉnh A đến đỉnh B, để tiết kiệm chi phí “đi lại” giữa các node.
Neo4j được so sánh như thế nào?
Neo4j so với RDBMS và NoQuery khác
Không thể phủ nhận: Các cửa hàng dữ liệu khác có các trường hợp sử dụng phù hợp Nhưng bất cứ khi nào doanh nghiệp của bạn muốn tận dung các kết nối giữa các điểm dữ liệu, bạn cần khai thác sức mạnh của Neo4j.
Dưới đây là cách cơ sở dữ liệu đồ thị hàng đầu thế giới chống lại các cơ sở dữ liệu quan hệ truyền thống (RDBMS) và các kho dữ liệu NoQuery cạnh tranh khác Neo4j so với cơ sở dữ liệu quan hệ (RDBMD)
Cơ sở dữ liệu quan hệ Neo4j, Cơ sở dữ liệu đồ thị gốc
Lưu trữ dữ liệu Lưu trữ trong các bảng cố điịnh, được xác điịnh trước với các hàng và cột có dữ liệu được kết nối thường rời rạc giữa các bảng, làm tê liệt hiệu quả truy vấn
Cấu trúc lưu trữ đồ thị với tính phụ thuộc không có chỉ mục dẫn đến các giao dịch và xử lý nhanh hơn cho các mối quan hệ dữ liệu.
Mô hình hóa dữ liệu
Mô hình cơ sở dữ liệu do các nhà tạo mô hình phát triển cần được chuyển đổi từ mô hình logic sang mô hình vật lý Do loại dữ liệu và nguồn được xác định trước nên bất kỳ thay đổi nào cũng đòi hỏi thời gian ngừng hoạt động kéo dài nhiều tuần.
Mô hình dữ liệu linh hoạt,
“thân thiện với bảng trắng” không cí sự phù hợp giữa mô hình logic và mô hình vật lý Các kiểu dữ liệu và nguồn có thể thêm được thêm hoặc thay đổi bất cứ lúc nào, dẫn đến thời gian phát triển ngắn hơn đáng kể và lặp lại nhanh nhẹn thực sự.
Hiệu suất truy vấn Hiệu suất xử lý dữ liệu chịu Xử lý đồ thị đảm bảo độ trể đựng số lượng và độ sâu của THAM GIA(hoặc các mối quan hệ được yêu cầu). bằng không và hiệu suất thời gian thực, bất kể số lượng hoặc độ sâu của mối quan hệ.
Ngôn ngữ truy vấn SQL: một ngôn ngữ truy vấn tăng độ phức tạp với số lượng THAM GIA cần thiết cho các truy vấn dữ liệu được kết nối.
Cypher: Một ngôn ngữ truy vấn biểu đồ gốc cung cấp cách thức hiệu quả và biểu cảm nhất để mô tả các truy vấn mối quan hệ.
Hỗ trợ giao dịch Hỗ trợ giao dịch ACID được yêu cầu bởi các ứng dụng doanh nghiệp cho dữ liệu phù hợp và đáng tin cậy.
Giữ lại các giao dịch ACID cho dữ liệu hoàn toàn phù hợp và đáng tin cậy suốt cả ngày - hoàn hảo cho các ứng dụng doanh nghiệp toàn cầu luôn hoạt động
Xử lý ở quy mô Quy mô thông qua nhân rộng và mở rộng kiến trúc là có thể nhưng tốn kém.Mối quan hệ dữ liệu phức tạp không được thu hoạch ở quy mô.
Mô hình đồ thị vốn đã chia tỷ lệ cho các truy vấn dựa trên mẫu.Kiến trúc quy mô duy trì tính toàn vẹn dữ liệu thông qua nhân rộng Tăng cường khả năng mở rộng với các hệ thống IBM POWER8 và CAPI Flash.
Hiệu quả trung tâm dữ liệu
Hợp nhất máy chủ là có thể nhưng tốn kém cho quy mô kiến trúc Kiến trúc quy mô là tốn kém về mua, sử dụng năng lượng và thời gian quản lý.
Dữ liệu và các mối quan hệ được lưu trữ nguyên bản, cho phép cải thiện hiệu suất đáng kể khi độ phức tạp và quy mô tăng cao Để đạt được điều này, các máy chủ được hợp nhất và phần cứng có hiệu suất cực cao được sử dụng để xử lý lượng dữ liệu khổng lồ.
Neo4j so với các cơ sở dữ liệu NoQuery khác:
Cơ sở dữ liệu NoQuery khác Neo4j, cơ sở dữ liệu đồ thị gốc
Lưu trữ dữ liệu không hỗ trợ dữ liệu được kết nối ở cấp cơ sở dữ liệu, dẫn đến hiệu suất và độ tin cậy của dữ liệu kém khi quy mô và độ phức tạp của các kết nối tăng lên.
Cấu trúc lưu trữ đồ thị gốc với tính phụ thuộc không có chỉ mục dẫn đến các giao dịch và xử lý nhanh hơn cho các mối quan hệ dữ liệu.
Cài đặt
Để tải Neo4j thành công, người dùng cần truy cập trang web chính thức https://neo4j.com/download/?ref=get-started-dropdown-cta Trong trang này, bạn sẽ điền thông tin theo yêu cầu, sau đó máy chủ sẽ xử lý và cung cấp đường dẫn tải cho bạn.
Sau khi tải về thành công , ta chạy file
Và lưu đường dẫn mặc định hoặc 1 thư mục bạn muốn lưu.
Tiếp tục chọn đường dẫn lưu data
Sau khi cài đặt thành công , bạn sẽ tạo 1 dự án theo các bước sau. B1 Nhấn vào NEW để tạo 1 project.
B2.Nhấn vào add local DBMS
B3.Sau đó đặt tên và mật khẩu của database
B4.Sau khi tạo thành công , ta tiếp tục khởi động bằng nhấn vào Start
B5.Sau khi database hoạt động nó sẽ hiện như ảnh bên dưới
B6.Sau đó ta chọn Open Neo4j Browser để thực hiện các thao tác trên database
B7.Giao diện thao tác trên database
B8.Ta sẽ thực hiện thao tác cơ bản như tạo 1 node trên neo4j
Một số thao tác trong NEO4J
Tạo nút và quan hệ
Tạo 1 node player với các thông tin như và một coach mới sau đó ta tạo một quan hệ giữa 2 node mới tọa, r xuất ra màn hình create (n:PLAYER{age:21,height:1.66,name:'Thành Quang',number:7,weight:53}), (k:COACH{name:'Thanh Bách'})
Bây giờ ta tìm những node ta đã tạo trước đó bằng lệnh:
MATCH(t:TEAM),(p:PLAYER),(c:COACH) where t.name='BigData' and p.name='Thành Quang' and c.name='Thanh Bách' return t,p,c
Bây giờ ta tạo mối quan hệ cho TEAM vs PlAYED đã tạo ở trên
MATCH(t:TEAM),(p:PLAYER),(c:COACH) where t.name='BigData' and p.name='Thành Quang' and c.name='Thanh Bách' create (p) -[:PLAYED_AGAINST{assists:7,minutes:90,points:20,rebounds:9}] -> (t) return t,p,c
Sửa nút và quan hệ
Bây giờ ta có thể sửa thông tin của 1 node
Thông tin node ban đầu
Ta sửa tên “Thành Quang ” thành “Trần Thành Quang” , tuổi “21” thành “20”
MATCH(n:PLAYER) where ID(n) C set n.name='Trần Thành Quang' , n.age return n
Bây giờ ta tiến hành sửa quan hệ của 2 node: ban đầu ta thêm thuộc tính salary cho quan hệ plays_for
Sau đó ta sửa tiền lại thành 5000000
MATCH(n:COACH), (t:TEAM) where ID(n) D and ID(t)E
MATCH (n) -[r:PLAYS_FOR] -> (t) set r.salaryP0000 return n ,t
Xóa nút và quan hệ
Xóa mối quan hệ của Joel Embiid
Truy vấn các nút
Để hiển thị tất cả các nodes ta thực câu lệnh Để hiển thị tất cả các team ta thực hiện câu lệnh: Để hiển thị ra tên các Team ta thực hiện câu lệnh: Để hiển thị tên và chiều cao PLAYER ta thực hiện câu lệnh:
Lọc các nút
Lọc nút có tên là “LeBron James”
Thông tin chi tiết của “LeBron James”
WHERE player.name="LeBron James"
Cách 2 Ở cách này khá thuận tiện nên chúng ta hoàn toàn có thể lọc nhiều thuộc tính khác nhau của các đối tượng mà chúng ta muốn lọc để tăng độ chính xác.
MATCH(player:PLAYER{name:"LeBron James",height:2.06,age:36,number:6})
Lọc những người chơi không có tên “LeBron James”
WHERE player.name "LeBron James"
Lọc các cầu thủ trên 2m
WHERE (player.weight/ (player.height*player.height)) < 25 RETURN player
Lọc các cầu thủ nặng hơn hoặc bằng 100 kg và cao dưới 2m
WHERE player.weight>0 AND player.height 0 OR player.height 0 OR player.height 2
Truy vấn các mối quan hệ
Để hiển thị những cầu thủ chơi cho đội LA Laker Để hiển thị những cầu thủ chơi cho một đội có lương trên 3000000
Tìm cầu thủ là đồng đội của LeBron James
Tìm cầu thủ là đồng đội của LeBron James có lương hơn hoặc bằng 40 triệu