Đó là vì việc sử dụng kỹ thuật này sẽ giúp ta không phải lưu lại những dữ liệu trùng lặp, dung lượng được backup sẽ nhỏ hơn nhiều so với dung lượng thực tế.. Giả sử như ta có 100GB dữ li
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRƯƠNG LÊ QUÂN
ỨNG DỤNG ĐỘ TƯƠNG ĐỒNG CHUỖI TRONG CHỐNG TRÙNG LẶP CHO CÁC TẬP DỮ LIỆU VĂN BẢN CÓ CẤU TRÚC DẠNG BẢNG
Ngành: Công nghệ Thông tin
Chuyên ngành: Kỹ thuật phần mềm
Mã số: 60.48.01.03
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: Tiến sĩ Hoàng Xuân Tùng
Hà Nội – 2015
Trang 2Lời cảm ơn
Tôi xin chân thành cảm ơn TS Hoàng Xuân Tùng, người đã tận tình hướng dẫn tôi trong suốt quá trình làm luận văn Những ý kiến đóng góp và sự chỉ bảo của thầy trong quá trình này là kim chỉ nam giúp tôi hoàn thành mục tiêu nghiên cứu của mình
Tôi xin cảm ơn tập thể thầy cô giáo trường Đại học Công nghệ - Đại học Quốc gia
Hà Nội đã giảng dạy và tạo điều kiện tốt nhất cho tôi trong thời gian tôi học tập tại trường cũng như khi nghiên cứu và làm luận văn
Tôi cũng xin được gửi lời cảm ơn tới những người đàn anh cùng thầy hướng dẫn những người đã cho tôi những lời khuyên cần thiết và sự động viên của mọi người trong quá trình làm luận văn của mình
Cuối cùng tôi xin gửi lời cảm ơn tới gia đình và bạn bè những người luôn đứng sau cổ vũ cho tôi trong suốt quãng thời gian học tập và làm luận văn
Trang 3Lời cam đoan
Tôi xin cam đoan những gì viết trong luận văn này là sản phẩm của cá nhân tôi, không sao chép từ người khác Trong toàn bộ luận văn những điều được trình bày hoặc
là của cá nhân tôi hoặc là được trích dẫn từ nhiều nguồn tài liệu Tất cả tài liệu tham khảo đều có xuất xứ rõ ràng và được trích dẫn hợp pháp Tôi xin hoàn toàn chịu trách nhiệm và mọi hình thức kỷ luật theo quy định cho lời cam đoan của mình
Trang 4Mở đầu
Trong luận văn này tôi trình bày các phương pháp giải quyết khó khăn khi thực hiện các phương pháp chống trùng lặp thông thường trên các tập dữ liệu văn bản có cấu trúc dạng bảng Khó khăn đó xuất hiện khi có lỗi nhập liệu, sự sai sót khi gõ máy dẫn tới việc những phương pháp thông thường không thể tìm được những dữ liệu bị trùng lặp Để giải quyết khó khăn trên tôi đề xuất một phương pháp chống trùng lặp dựa vào cách tính độ tương đồng chuỗi nhằm đạt được kết quả cao nhất khi tìm ra các dữ liệu trùng lặp trên các tập dữ liệu văn bản khi xảy ra lỗi nhập liệu Bằng phương pháp tính
độ tương đồng này những dữ liệu khi được nhập vào trong tập văn bản cho dù có xảy ra lỗi nhập liệu vẫn có thể bị phát hiện và xử lý
Mặc dù môi trường thử nghiệm còn thiếu thốn, các tập dữ liệu đầu vào còn ít và
cả phương pháp thực nghiệm độ tương đồng nhưng kết quả thực nghiệm đã chỉ ra rằng: phương pháp chống trùng lặp ứng dụng độ tương đồng đã giải quyết được vấn đề nhập liệu Tỉ lệ sai khi nhập liệu càng lớn thì hiệu suất của phương pháp này càng cao Ngay
cả khi không xảy ra lỗi nhập liệu thì hiệu suất của phương pháp mới cũng ngang bằng với phương pháp cũ Điểm yếu là thời gian chạy, tôi chưa thể thực nghiệm những phương pháp có thể giải quyết được vấn đề thời gian đã nêu trong lý thuyết
Để có thể đánh giá được một cách công bằng nhất cần những thử nghiệm lớn hơn với những phương pháp tối ưu hơn Tuy nhiên tôi vẫn có thể kết luận được trong luận văn này chính là: Phương pháp chống trùng lặp ứng dụng độ tương đồng chuỗi đã phần nào giải quyết được những khó khăn khi xử lý dữ liệu trên các tập văn bản có cấu trúc
Trang 5Mục Lục
DANH MỤC CÁC TỪ VIẾT TẮT 7
DANH SÁCH HÌNH VẼ 8
DANH SÁCH BẢNG 9
Chương 1: Trùng lặp dữ liệu và các phương pháp chống trùng lặp 10
1.1 Các vấn đề trùng lặp dữ liệu 10
1.2 Chống trùng lặp dữ liệu 11
1.2.1 Khái niệm 11
1.2.2 Lợi ích của chống trùng lặp dữ liệu 12
1.3 Ứng dụng của chống trùng lặp dữ liệu 13
1.3.1 Backup dữ liệu 13
1.3.2 Nhân bản dữ liệu 14
1.3.3 Lưu trữ dữ liệu 14
Chương 2: Phân loại các phương pháp chống trùng lặp dữ liệu 17
2.1 Các phương pháp chống trùng lặp phân chia theo dữ liệu 17
2.1.1 File Base Compare 17
2.1.2 File Level Hashing 17
2.1.3 Block Level Hashing 18
2.1.4 Sub Block Level Hashing 19
2.1.5 Delta Versioning 20
2.1.6 So sánh các phương pháp chống trùng lặp 21
2.2 Các phương pháp chống trùng lặp theo cách thức thực hiện 23
2.2.1 Inline 23
2.2.2 Post-process 24
2.2.3 Client Base 25
2.2.4 Target-base 25
2.2.5 NAS-based 26
2.2.6 SAN-based 26
2.2.7 Global 27
2.3 Các đoạn có chiều dài cố định và các đoạn có chiều dài linh hoạt 28
Chương 3 Ứng dụng độ tương đồng chuỗi trong chống trùng lặp dữ liệu 31
Trang 63.1 Vấn đề của các phương pháp chống trùng lặp cho các tập dữ liệu văn bản
có cấu trúc dạng bảng 31
3.2 Ứng dụng của độ tương đồng chuỗi vào chống trùng lặp 32
3.2.1 Sử dụng khoảng cách chuỗi 32
3.2.2 Phương pháp sử dụng phân cụm k-means 36
3.2.3 Phương pháp sử dụng thuật toán LSH (locality sensitive hashing) 39
Chương 4 Thực nghiệm và đánh giá kết quả 42
4.1 Tổng quan về thử nghiệm 42
4.2 Thử nghiệm 1 43
4.3 Thử nghiệm 2 46
4.4 Đánh giá kết quả 48
4.5 Các thử nghiệm khác 49
4.5.1 Thử nghiệm chọn cận dưới bằng cách thống kê 49
4.5.2 Thử nghiệm đánh giá tác động của cận dưới 50
4.6 Thực nghiệm thực tế 52
4.7 Kết luận và hướng phát triển tương lai 53
4.7.1 Kết luận 53
4.7.2 Hướng phát triển tương lai 54
TÀI LIỆU THAM KHẢO 55
Tiếng Anh 55
Phụ lục 57
Trang 7DANH MỤC CÁC TỪ VIẾT TẮT
NAS Network Attached Storage
LSH Locality Sensitive Hash
Trang 8DANH SÁCH HÌNH VẼ
Hình 1.1 Chống trùng lặp dữ liệu [3] 12
Hình 1.2 Lưu trữ dữ liệu khi không sử dụng chống trùng lặp [3] 15
Hình 1.3 Lưu trữ dữ liệu khi sử dụng chống trùng lặp [3] 15
Hình 2.1 File Base Compare 17
Hình 2.2 Quy trình hoạt động của File Level Hashing 18
Hình 2.3 Quy trình làm việc của Block Level Hashing 19
Hình 2.4 Chia nhỏ File 19
Hình 2.5 Dữ liệu sau khi xóa block/sub-block 20
Hình 2.6 Inline 24
Hình 2.7 Post-process 25
Hình 2.8 Client Base 25
Hình 2.9 Target-base 26
Hình 2.10 NAS-Based 26
Hình 2.11 SAN-based 27
Hình 2.12 Global 28
Hình 2 13 Chia các đoạn có chiều dài cố định [1] 29
Hình 2 14 Chia các đoạn có độ dài linh hoạt [1] 29
Hình 3.1 Sử dụng phương pháp chống trùng lặp bình thường 31
Hình 3.2 Quy trình chống trùng lặp sử dụng độ tương đồng chuỗi 33
Hình 3.3 Quy trình đánh giá độ tương đồng chuỗi 33
Hình 3 4 Lưu đồ của phương pháp tương đồng chuỗi 35
Hình 3.5 Thuật toán K-means 36
Hình 3.6 Lưu đồ của thuật toán K-means 37
Hình 3.7 Lưu đồ mới của phương pháp sử dụng K-means 38
Hình 3 8 Mô hình thuật toán LSH [10] 40
Hình 3 9 Lưu đồ của phương pháp ứng dụng LSH 41
Hình 4.1 Kết quả thu được sau thực nghiệm 1 44
Hình 4.2 Kết quả thu được sau thực nghiệm 2 47
Hình 4.3 Biểu đồ két quả thực nghiệm 51
Trang 9DANH SÁCH BẢNG
Bảng 2.1 So sánh các phương pháp 23
Bảng 4.1 Sự thay đổi trong file đầu vào thử nghiệm 1 44
Bảng 4.2 Kết quả của thực nghiệm 1 45
Bảng 4.3 Sự thay đổi trong file gốc thử nghiệm 2 46
Bảng 4.4 Kết quả của thực nghiệm 2 48
Bảng 4.5 File đầu vào thực nghiệm và sự thay đổi của cận dưới 50
Bảng 4.6 Bảng kết quả của thực nghiệm tác động của cận dưới 52
Trang 10Chương 1: Trùng lặp dữ liệu và các phương pháp chống trùng lặp
Trùng lặp dữ liệu là việc những dữ liệu có nội dung giống nhau nhưng vì nhiều nguyên nhân khác nhau mà bị lưu lại nhiều lần Một trong những hậu quả mà trùng lặp
dữ liệu gây ra chính là hao phí cho không gian lưu trữ Dữ liệu trùng lặp càng lớn thì hao phí càng nhiều Ví dụ như một người bán hàng gửi 1 bản giới thiệu sản phẩm khoảng 10mb cho khoảng 500 người mỗi bản báo cáo phải chứa trong 1 file khác nhau cho dù nội dung của chúng phần lớn là giống nhau, lúc này dung lượng phải lưu trữ chỉ khoảng 5gb, đương nhiên đó không phải một con số lớn thế nhưng nếu phải gửi 10 bản giới thiệu, 100 bản giới thiệu thì sao, đó chắc chắn không phải là con số nhỏ nữa Hơn nữa phần lớn dữ liệu là giống nhau khiến cho việc lưu trữ dữ liệu trở nên hoang phí, những block giống nhau lại được lưu trữ nhiều lần không những khiến chi phí cho không gian lưu trữ tăng lên nhanh chóng mà còn khiến cho chi phí khi backup dữ liệu tăng lên tới mức chóng mặt (Chi tiết có thể xem trong [1])
Theo [2] thì không chỉ trong những công ty lớn xảy ra việc trùng lặp dữ liệu mà trên cả những đám mây Đám mây là những hồ dữ liệu lớn nơi các dữ liệu được lưu trữ Thay vì việc phải sử dụng một hay nhiều máy chủ thì tất cả dữ liệu trong đám mây đều được ảo hóa thông qua internet Điểm mạnh của việc lưu trữ đám mây chính là ở tính mềm dẻo, khả năng tính toán, tính đàn hồi và co giãn tài nguyên, người sử dụng không cần phải tính toán dung lượng lưu trữ mà chỉ cần trả tiền là sẽ có dung lượng cần thiết Chính vì thế mà việc trùng lặp dữ liệu xảy ra trong đám mây lại càng nhiều Lấy ví dụ đơn giản một ông A yêu thích nhạc cổ điển, ông ta đưa một file X lên đám mây, ta lại
có thêm một ông B cũng rất yêu thích nhạc cổ điển trùng hợp là ông ta cũng yêu thích bài X và cũng đưa nó lên đám mây Hiện giờ trong đám mây sẽ có 2 bài X và cùng phải lưu trữ hai bài này Như vậy chi phí cho cùng một file, cùng một dữ liệu sẽ tốn gấp đôi, chưa kể tới việc số người dùng đám mây càng lúc càng nhiều, số lượng dữ liệu trùng lặp càng lúc càng lớn, không phải là gấp đôi nữa mà là gấp ba, gấp bốn thậm chí là gấp hàng chục lần Nếu không có biện pháp nào giải quyết vấn đề này thì việc lãng phí tài nguyên
sẽ trở thành một vấn đề rất lớn, chi phí cho những tài nguyên dư thừa kia sẽ trở thành gánh nặng đối với nhà cung cấp
Trang 11Một vấn đề về trùng lặp dữ liệu cực kỳ quan trọng và thường thấy nữa đó chính là trong vấn đề về nhập liệu Việc lưu trữ thông tin về một người, một sản phẩm hay một
tổ chức dưới dạng bảng là một việc thông dụng, thông tin về họ sẽ được lưu trữ dưới dạng hàng và cột Thông tin về một người có thể bị lặp lại trong quá trình nhập liệu dẫn tới việc trong một bảng có thể xuất hiện có thể xuất hiện thông tin về một người nhiều lần Điều này xảy ra một cách thường xuyên bởi sự nhầm lẫn của con người, số lượng
dữ liệu càng lớn thì mức độ sai sót lại càng cao Lấy ví dụ như việc nhập thông tin sinh viên trong một trường đại học khoảng 8000 người, số lượng học sinh này được chia ra cho một phòng 8 người vậy trung bình mỗi người phải nhập thông tin cho khoảng 1000 người, không có gì đảm bảo cả 8 người đó đều không nhầm lẫn, việc thông tin của một sinh viên A nào đó bị lặp lại trong khi nhập liệu cũng là điều thường thấy Trong trường hợp này, con số nhầm lẫn có thể lên tới hàng chục thậm chí hàng trăm sinh viên, việc kiểm tra thủ công cũng hết sức khó khăn bởi lượng dữ liệu quá lớn Nghiêm trọng hơn nữa là dữ liệu bị trùng lặp mắc phải những lỗi sai nhập liệu, trong trường hợp này cả những phương pháp chống trùng lặp dữ liệu thông thường cũng không thể nào giải quyết nổi bởi những dữ liệu do sai lỗi nhập liệu khi nhập liệu cho dù rất nhỏ cũng khiến cho
dữ liệu trở nên khác hoàn toàn so với dữ liệu gốc
Tất cả những vấn đề trên đều dẫn tới một kết quả đó là tăng lượng chi phí không cần thiết cho người sử dụng khi lưu trữ dữ liệu, chi phí cho không gian lưu trữ, chi phí cho việc backup dữ liệu Những chi phí không cần thiết này sẽ trở thành gánh nặng cho việc lưu trữ dữ liệu và làm phát sinh ra những vấn đề khác như thời gian truy suất tăng cao, tốn kém dung lượng đường truyền Để giải quyết vấn đề này cần sử dụng tới một
kỹ thuật đặc biệt cho phép người sử dụng loại bỏ những dữ liệu trùng lặp và lưu trữ lại những dữ liệu độc nhất Kỹ thuật đó gọi là chống trùng lặp dữ liệu
dữ liệu độc nhất, điều này giúp cho ta có thể dùng ít hơn 100MB để lưu trữ từng đó thông tin
Trang 12Hình 1.1 Chống trùng lặp dữ liệu [3]
1.2.2 Lợi ích của chống trùng lặp dữ liệu
Lợi ích mà chống trùng lặp đem lại là rất lớn, việc làm giảm dung lượng không gian lưu trữ có thể làm giảm không gian chứa cần thiết từ đó làm tăng khả năng lưu trữ thông tin, giảm chi phí không gian lưu trữ ( chi tiết xem ở [3] [4]) Không chỉ vậy việc giảm không gian lưu trữ giúp lượng dữ liệu được lưu trữ tăng lên đáng kể Ví dụ: Cùng với 100MB không gian lưu trữ ta có thể lưu trữ được lượng dữ liệu lớn hơn rất nhiều Với việc loại bỏ đi dữ liệu trùng lặp, lưu lại dữ liệu độc nhất và sử dụng con trỏ, khiến
dữ liệu độc nhất thậm chí còn có thể sử dụng nhiều lần và đại diện cho nhiều dữ liệu khác nhau
Một lợi ích khác của việc sử dụng chống trùng là việc backup dữ liệu sẽ trở nên nhanh hơn Vì sao ư? Đó là vì việc sử dụng kỹ thuật này sẽ giúp ta không phải lưu lại những dữ liệu trùng lặp, dung lượng được backup sẽ nhỏ hơn nhiều so với dung lượng thực tế Giả sử như ta có 100GB dữ liệu trong đó có 60GB dữ liệu là giống nhau về nội dung, trong tình trạng không có chống trùng lặp, toàn bộ 100GB này sẽ được toàn bộ được lưu lại vào trong không gian bộ nhớ ngược lại trong trường hợp sử dụng chống trùng lặp thì chúng ta không phải lưu lại toàn bộ 100GB dữ liệu trên bởi 60GB dữ liệu trùng lặp sẽ bị loại bỏ đi phần lớn và lưu lại những dữ liệu độc nhất
Bên cạnh lợi ích về lưu trữ dữ liệu, chống trùng lặp cũng giúp chúng ta giảm thiểu được chi phí cho việc truyền dữ liệu Bằng việc sử dụng chống trùng lặp tại các máy khách dung lượng dữ liệu sẽ giảm xuống, khiến tốc độ truyền qua mạng sẽ được nhanh hơn Lượng băng thông khi sử dụng cũng có thể được giảm xuống
Theo [3] lợi ích của việc sử dụng phương pháp chống trùng lặp dữ liệu có thể gói gọn trong 3 lợi ích lớn
Giảm chi phí cho không gian lưu trữ
Giảm chi phí cho việc backup dữ liệu
Trang 13 Tăng hiệu suất của việc lưu trữ dữ liệu
Từ những lợi ích nói trên có thể thấy kỹ thuật chống trùng là một trong những kỹ thuật quan trọng có tầm ảnh hưởng lớn, không chỉ với các công ty lớn phải xử lý những
cơ sở dữ liệu khổng lồ, những cơ sở dữ liệu dạng đám mây, mà còn cả đối với cả cá nhân người sử dụng
1.3 Ứng dụng của chống trùng lặp dữ liệu
Chống trùng lặp dữ liệu là sự lựa chọn tốt nhất khi nó không ảnh hưởng gì tới hiệu suất của các chương trình ta đang sử dụng hoặc là những tác vụ ta cần phải hoàn thiện
Sử dụng chống trùng lặp dữ liệu sẽ tiết kiệm được rất nhiều tiền bạc, dung lượng lưu trữ
và thời gian tuy nhiên không phải lúc nào việc sử dụng nó cũng là một sự lựa chọn đúng đắn Theo [4] và [1] Chống trùng lặp dữ liệu có tác dụng lớn nhất ở trong 3 lĩnh vực:
và giảm thiểu thời gian cần thiết để phục hồi
1.3.1 Backup dữ liệu
Backup là lĩnh vực tuyệt vời nhất để áp dụng Chống trùng lặp dữ liệu Trong thực
tế các giải pháp chống trùng lặp dành cho việc backup cũng được các nhà sử dụng quan tâm nhất (Chi tiết có thể xem ở [1] và [4])
Với các giải pháp thực hiện trên client đương nhiên cần phải có một bản backup đầy đủ nhằm đảm bảo việc nếu xảy ra thảm họa thì có thể phục hồi lại 100% trạng thái ban đầu Tuy nhiên sau khi đã có bản backup này chúng ta sẽ quản lý nó theo phương châm nếu không có gì thay đổi thì cũng chẳng cần thiết phải sửa bất cứ thứ gì và chỉ khi nào có chỉnh sửa thêm hoặc sửa bất cứ dữ liệu nào thì lúc đó mới cần làm việc với bản backup Khi tất cả thay đổi về dữ liệu đã được lưu trữ chúng ta có thể gửi chúng cho 1 ứng dụng hoặc một hệ thống chống trùng lặp để thực hiện việc so sánh và loại bỏ các
dữ liệu trùng lặp và từ đó lưu trữ những dữ liệu độc nhất
Trang 14Một vài biện pháp hoạt động trên client đôi khi vẫn cần tới việc gửi những file trùng lặp cho 1 thiết bị trung tâm (central appliance) trước khi những dữ liệu trùng lặp
bị xóa, những biện pháp khác thông minh hơn là thực hiện việc giao tiếp với client để chắc chắn rằng chỉ có những gì cần thiết là được gửi tức là những dữ liệu mà chưa có Nên chọn đúng biện pháp giải quyết vấn đề của mình bằng không chúng ta có thể tốn nhiều băng thông hơn để xóa đi những bản backup trên client
1.3.2 Nhân bản dữ liệu
Nhân bản dữ liệu là rất cần thiết cho việc lưu trữ dữ liệu, tạo ra một bản sao dữ liệu để đề phòng việc mất mát dữ liệu khi thảm họa có thể xảy ra Bản sao đó được sử dụng để khôi phục lại những dữ liệu gốc vì thế việc lưu trữ nó cũng sẽ trở thành một vấn
đề lớn nếu như nó chiếm quá nhiều chi phí và trở thành một gánh nặng cho người sử dụng (Chi tiết trong [1])
Một trong những vấn đề tốn kém nhất trong Nhân bản dữ liệu là băng thông mà nó cần để chuyển toàn bộ dữ liệu tới nơi lưu trữ nó Dữ liệu mà chúng ta cần để sao lưu càng nhiều thì lượng băng thông cần thiết lại càng lớn Rất nhiều công ty đã tìm cách để giảm chi phí của việc này bằng cách chỉ tạo ra bản sao cho các dữ liệu đặc biệt then chốt
và quan trọng ảnh hưởng tới công ty hoặc sử dụng những link tốn kém ít băng thông hơn và lãng phí cả đống thời gian chờ đợi nó chuyển dữ liệu sang nơi lưu trữ
Khi người sử dụng cần chuyển một lượng dữ liệu khổng lồ qua mạng trong trường hợp thảm họa đã xảy ra và cần thiết phải khôi phục ngay lập tức thì ngay lập tức vấn đề
sẽ xảy ra Cụ thể ở đây chính là chi phí cho băng thông khi phải chuyển một lượng dữ liệu khổng lồ như thế Đó là lí do sử dụng Chống trùng lặp dữ liệu ở đây là một lựa chọn khôn ngoan, nó sẽ đem lại hiệu quả không ngờ tới, giảm chi phí cho băng thông một cách rất hiệu quả Với việc sử dụng phương pháp Delta Versioning thì lượng dữ liệu phải chuyển sẽ bị giảm đi rất nhiều mà vẫn có thể đáp ứng được việc khôi phục dữ liệu gốc một cách đầy đủ, ngoài ra việc sử dụng Delta Versioning cũng sẽ tiết kiệm được không ít thời gian cho người sử dụng
1.3.3 Lưu trữ dữ liệu
Việc lưu trữ dữ liệu trong thời gian dài cũng là một vấn đề nan giải để tiết kiệm chi phí, thay vì phải lưu trữ toàn bộ dữ liệu thì chỉ cần lưu trữ những dữ liệu mới hoặc thay đổi Giả sử như như ta phải lưu trữ dữ liệu trong vòng 5 tuần giống như hinh 2.15, 2.16 thì nếu như có thể sử dụng 24.3 TB để lưu trữ hơn 110 TB thì số chi phí mà ta tiết kiệm được sẽ là rất lớn (Chi tiết trong [3])
Trang 15Hình 1.2 Lưu trữ dữ liệu khi không sử dụng chống trùng lặp [3]
Hình 1.3 Lưu trữ dữ liệu khi sử dụng chống trùng lặp [3]
Hình 1.1 là ví dụ về việc một tập dữ liệu khoảng 20TB được backup trong vòng 5 tuần bao gồm sự độ lớn dữ liệu và tốc độ thay đổi khi không sử dụng các phương pháp chống trùng lặp Trong khi đó hình 2.16 cùng là lượng dữ liệu và thời gian nhưng có sử dụng phương pháp chống trùng lặp
Trang 16Nếu như sử dụng phương pháp thông thường (không chống trùng lặp) thì chúng ta cần mất tới nhiều hơn 110 TB trong vòng 5 tuần Lượng dữ liệu sẽ tăng dần theo thời gian và trong dó có cả những dữ liệu trùng lặp không cần thiết Kế đó khi nhìn xuống hình 1.2 ta có thể thấy khi sử dụng phương pháp chống trùng lặp thì dung lượng cần thiết trong vòng 5 tuần đã giảm xuống một cách đáng kể trong khi vẫn giữ được tiến độ lưu trữ Có tói 78% dữ liệu đã bị loại bỏ, những dữ liệu này là trùng lặp và không cần thiết Rõ ràng là khi ứng dụng chống trùng lặp vào lưu trữ dữ liệu sẽ giúp ta tiết kiệm được chi phí cho không gian lưu trữ
Trang 17Chương 2: Phân loại các phương pháp chống trùng lặp dữ liệu
2.1 Các phương pháp chống trùng lặp phân chia theo dữ liệu
Việc phân chia các phương pháp chống trùng lặp dựa vào việc chia nhỏ dữ liệu,
dữ liệu càng được chia nhỏ thì hiệu quả của chống trùng lặp lại càng cao Theo các tài liệu [2] [3] thì các phương pháp chống trùng lặp thông thường là:
File base compare
File-level Hashing
Block-level Hashing
Sub-Block-level Hashing
Delta Versioning
2.1.1 File Base Compare
Phương pháp đơn giản và dễ thực hiện nhất File Base Compare xác định 2 file có phải là có cùng dữ liệu hay không bằng cách so sánh các metadata của 2 file đó ví dụ như tên file, ngày khởi tạo, dung lượng,… Nếu các metadata của 2 file là giống nhau thì
có thể kết luận 2 file là giống nhau và có thể xóa một file ngược lại nếu như metadata của 2 file là khác nhau
Đây là một phương pháp dễ thực hiện và tốn ít chi phí nhất nhưng hiệu suất của
nó là không cao, bằng cách áp dụng phương pháp này chúng ta có thể tiết kiệm khoảng 50% dung lượng cần thiết
Hình 2.1 File Base Compare
2.1.2 File Level Hashing
Hash là việc tạo ra một chuỗi ký tự đại diện cho 1 đoạn nội dung dữ liệu Hash là một bước tiến lớn của việc chống trùng lặp File hashing tạo ra một chuỗi ký tự duy nhất đại diện cho các file mà ta gọi nó là các hash, bằng cách so sánh các hash này ta có thể xác định file nào là trùng lặp file nào không Sau đó sẽ thực hiện việc xóa hoặc giữ lại file
Trang 18Một trong những cách sử dụng File Level hashing thông dụng nhất là sử dụng một bảng index lưu trữ những hash của các file từ đó giúp chúng ta có thể dễ dàng so sánh các hash được với nhau
Có rất nhiều thuật toán Hashing khác nhau nhưng cách thực hiện cơ bản là giống nhau, quy trình Hashing dữ liệu có nghĩa là mã hóa những dữ liệu đó theo một cách nào
đó để có được kết quả đầu ra là độc nhất Có nghĩa là dữ liệu khác nhau sẽ có hash khác nhau
Hình 2.2 Quy trình hoạt động của File Level Hashing
2.1.3 Block Level Hashing
Để sử dụng được phương pháp này, chúng ta cần chia nhỏ các file thành các block,
kế đó sử dụng các thuật toán hash cho các block và tạo ra các hash cho mỗi block này Sau khi so sánh các hash này với nhau ta sẽ thực hiện việc xóa hoặc giữ lại các block này
Block-Level hashing có thể sử dụng trên cả dữ liệu có cấu trúc hoặc dữ liệu không
có cấu trúc, tức là dữ liệc được chứa trên đĩa (không có cấu trúc) và dữ liệu được chứa trong bảng cơ sở dữ liệu (có cấu trúc) Bỡi phương pháp này làm việc với các block dữ liệu đã có và các block dữ liệu mới cho nên việc nó là dữ liệu gì, đến từ đâu là không quan trọng
Mỗi một block dữ liệu mới được đưa vào sẽ được hash và có được hash của mình, sau khi so sánh hash của nó với các hash của các block cũ ta có thể quyết định sẽ giữ nó lại hoặc xóa nó đi
Giống
Trang 19Hình 2.3 Quy trình làm việc của Block Level Hashing
2.1.4 Sub Block Level Hashing
Phương pháp này cũng giống như block level hashing nhưng ở tốt hơn rất nhiều Bởi sau khi chia nhỏ file thành các block ta lại tiếp tục chia nhỏ các block thành các sub-block sau đó sẽ làm việc trên các sub-block đó Bởi vì size của mỗi sub-block rất nhỏ kết quả thu được sẽ rất khả quan và bởi vì nó làm việc trên các sub-block cho nên phương pháp này giống như block level hashing có thể được áp dụng trong cả dữ liệu có cấu trúc và không có cấu trúc
Hình 2.4 Chia nhỏ File
Đối phương pháp Block Level Hashing, Sub-Block Level Hashing xuất hiện một vấn đề đó là việc xử lí dữ liệu sau khi đã xóa đi dữ liệu trùng lặp bởi chống trùng lặp không thể làm mất đi dữ liệu của một file Vậy phải xử lý như thế nào để có thể đảm bảo việc toàn vẹn dữ liệu mà không làm mất đi mục tiêu ban đầu của chống trùng lặp
Để giải quyết vấn đề này ta sử dụng các hash như là các con trỏ của block/sub-block Ta lập một bảng lưu trữ các hash gọi là index, đối với các hash trùng nhau trong index vẫn
Chia 1 File
thành các
Block
Hashing Block thành hash
Trang 20lưu giữ lại hash của các block/sub-block đã bị xóa và thay thế dữ liệu chứa trong block/sub-block bằng hash của chính nó
Hình 2.5 Dữ liệu sau khi xóa block/sub-block
Bảng index chứa tất cả các hash và các hash trỏ tới các dữ liệu độc nhất và bất cứ một sub-block/block bị chống trùng lặp sẽ bị thay thế bằng 1 con trỏ hash Đến khi cần tái tạo dữ liệu gốc các hash sẽ trỏ tới dữ liệu gốc và thực hiện việc tái tạo dữ liệu Ví dụ như hình 2.4 dữ liệu của block 1 và dữ liệu của block 5 có cùng hash, 1 trong 2 data sẽ
bị xóa và được thay thế bằng hash Khi cần tái tạo dữ liệu của block 1 ta sẽ dùng dữ liệu của block 5
2.1.5 Delta Versioning
Phương pháp này sử dụng những dữ liệu gọi là Delta để làm tối ưu hóa việc lưu trữ dữ liệu Vậy Delta là gì? Đó là những dữ liệu gốc và duy nhất làm nên tính khác biệt giữa hai file Chẳng hạn như ta tạo ra một file word và làm việc với nó, sau khi làm việc xong ta đóng file lại và save vào máy Một vài ngày sau ta lấy file word ra và sửa một
số chữ trong nó rồi save lại Vậy thì một vài chữ đó là điểm gây nên khác biệt giữa file word cũ và mới, những chữ đó chính là dữ liệu mà ta gọi là Delta
Thế Delta Versioning làm việc như thế nào và Delta Versioning có thể tối ưu hóa việc lưu trữ dữ liệu như thê nào?
Phương pháp làm việc của Delta Versioning thực chất rất đơn giản, tất cả mọi hoạt động của nó đều thực hiện trên phần dữ liệu Delta ví dụ như lưu lại Delta hoặc xóa Về
cơ bản mà nói thì phần lớn dữ liệu khác ngoài Delta của một file là giống nhau cho nên việc chỉ lưu trữ các dữ liệu Delta tốc độ lưu trữ hoặc backup dữ liệu trở nên nhanh hơn
Trang 21rất nhiều Vẫn là ví dụ file Word ở trên, thay vì phải lưu file mới rồi xóa file cũ đi thì ta chỉ cẩn lưu lại dữ liệu Delta Như vậy lượng data phải lưu và trong đĩa là rất ít, không chiếm nhiều dung lượng và tốc độ lưu trữ cũng sẽ rất nhanh Ngoài ra khi cần backup lại một file thì chỉ cần xóa đi delta là được
Delta Versioning làm việc trên cả các block, subblock hoặc file cho nên ta có thể chia nó làm 3 dạng:
File-level Detal Versioning: Phương pháp này làm việc trực tiếp trên file, khi các file bị trùng lặp nó sẽ lưu lại các metadata của các file có dữ liệu trùng lặp với nó thay vì lưu lại cả hai file Khi cần sử dụng tới các file đã bị xóa này, metadata được lưu trữ sẽ làm nhiệm vụ như một con trỏ, trỏ tới file trùng lặp và dùng dữ liệu ở đó
Block-level Delta Versioning: Phương pháp này làm việc trực tiếp trên các block và chỉ chứa các dữ liệu bị thay đổi so với dữ liệu gốc Block-level Delta Versioning tạo ra các snapshot, mỗi snapshot chỉ lưu trữ những thay đổi so với dữ liệu gốc
Block-level Delta Versioning cũng có thể giảm sự trung lặp dữ liệu khi thực hiện việc khôi phục dữ liệu sau thảm họa (DS) Giả sử như chúng ta muốn
cứ 6 tiếng là lại update một lần, theo cách thông thường thì chúng ta phải lặp lại việc lưu trữ thông tin mỗi 6 tiếng Như vậy không những tốn kém về thời gian mà còn làm chậm tốc độ xử lý và lưu trữ Khi chúng ta sử dụng phương pháp này thì thay vì phải lặp lại các dữ liệu đã có nó sẽ giúp chúng
ta chỉ đưa lượng thông tin mới hoặc thông tin đã bị sửa đổi trong dữ liệu gốc
Sub-block Delta Versioning: Phương pháp này cũng giống như Block-level Delta Versioning nhưng ở triệt để hơn Đó lại vì lí do dung lượng xử lý, dung lượng càng nhỏ thì việc xử lý càng triệt để Ta có thể hiểu như thế này khi ta dùng phương pháp Block Delta, dữ liệu bị chia nhỏ tới mức block nhưng dữ liệu trong các block cũng có những đoạn trùng nhau vậy thì việc chống trùng lặp sẽ trở nên không triệt để Thay vì đó ta chia nhỏ các block
đó thành các sub-block rồi thực hiện chống trùng lặp thì hiệu suất sẽ cao hơn rất nhiều Ngoài ra việc update dữ liệu cũng nhanh hơn do thay vì ta phải update cả block thì chỉ cần update các sub-block có dung lượng nhỏ hơn nhiều
2.1.6 So sánh các phương pháp chống trùng lặp
Lợi ích mà các phương pháp chống trùng lặp đem lại phụ thuộc vào 3 điều kiện sau:
Trang 22 Thời gian xử lý
Tính triệt để
Chi phí cho mỗi phương pháp
Điều đó có nghĩa là mỗi phương pháp sẽ được ứng dụng trong những trường hợp khác nhau phụ thuộc vào yêu cầu của người sử dụng Mức độ phức tạp của các phương pháp khiến cho thời gian xử lý của nó trở nên nhanh hoặc chậm, cũng ảnh hưởng đến tính triệt để của các phương pháp đó, hiển nhiên càng phức tạp thì chi phí để sử dụng càng lớn Vì vậy khi chọn lựa các phương pháp chống trùng lặp để đưa vào thực tiễn thì cần chọn lựa kỹ càng
Tên phương pháp Thời gian xử lý Tính triệt để Chi phí
File Base Compare Nhanh nhất bởi
không cần chia nhỏ
dữ liệu, không cần thuật toán để tìm Hash chỉ việc so sánh metadata với nhau
Rất kém, chỉ cần một chút sai khác về thông tin là sẽ kết luận không giống nhau Nhiều sai sót
Không hề phức tạp nên chi phí không cao thậm chí là đơn giản
File Level Hashing Vẫn rất nhanh bởi
không cần chia nhỏ
dữ liệu mà chỉ cần sử dụng thuật toán để tìm Hash
Tốt hơn File Base Compare nhưng chưa đủ bởi không cách nào làm việc được trên dữ liệu của một file
Phức tạp hơn nhưng chi phí cũng chưa cao lắm
Block/Sub Block
Hashing
Phương pháp này phức tạp hơn những phương pháp trước bởi phải trải qua bước chia nhỏ file thành các block hoặc sub block rồi mới thực hiện thuật toán Hashing
Rất triệt để, bởi dữ liệu được làm việc triệt để trên block/sub-block
Chi phí lớn bởi thuật toán phức tạp, nhiều công đoạn
Delta Versioning Phương pháp này rất
thích hợp với lưu trữ
và update dữ liệu thường xuyên
Rất tốt Phức tạp và tốn
kém
Trang 23Bảng 2.1 So sánh các phương pháp
Từ bảng trên có thể thấy được khi cần đến độ chính xác thì nên sử dụng block nhưng muốn tốn kém ít chi phí và mức độ chính xác không cần quá cao thì có thể dùng File Compare và File Level Hashing
block/sub-Đối với việc khôi phục dữ liệu sau thảm hoa thì Delta Versioning là lựa chọn duy nhất
Ngoài ra với các dữ liệu có cấu trúc thì phương pháp lựa chọn là Block/sub-block Hashing, bởi việc xử lý các dữ liệu kiểu này chỉ có thể thực hiện trên một file chính vì vậy các phương pháp File Base không có cách nào ứng dụng được trên các dữ liệu như thế
Tóm lại, cần phải chọn lựa một cách cẩn thận các phương pháp chống trùng lặp khi áp dụng vào thực tiễn sao cho phù hợp với hoàn cảnh của người sử dụng Tránh những trường hợp đem lại hiệu suất thấp hoặc lãng phí một cách không cần thiết
2.2 Các phương pháp chống trùng lặp theo cách thức thực hiện
Các phương pháp chống trùng lặp thường được chia theo vị trí thực hiện chống trùng lặp, phụ thuộc vào người sử dụng khác nhau mà sẽ có những vị trí chống trùng lặp khác nhau, mỗi phương pháp lại có lợi ích khác nhau Việc phân chia này dành cho khi thực hiện quá trình chống trùng lặp trong mạng Theo [5] có tất cả 7 phương pháp chống trùng lặp được chia theo cách này:
Inline: Dữ liệu được chống trùng lặp theo thời gian thực khi nó bắt đầu được lưu trữ
Post-Process: Dữ liệu sẽ được lưu trữ trước rồi sau đó mới bắt đầu được chống trùng lặp
Client-side: Dữ liệu sẽ được chống trùng lặp trước khi nó được gửi tới đích
Target-base: Dữ liệu sẽ được chống trùng lặp sau khi nó được gửi tới đích
NAS :Dữ liệu được gửi tới đích thông qua mạng IP
SAN – base: Dữ liệu được gửi tới đích thông qua FC
Global: Dữ liệu được chống trùng lặp nhờ một cơ sở hạ tầng trên các transport protocol
2.2.1 Inline
Đầu tiên là phương pháp thông dụng nhất: Inline, phương pháp này còn có một cái tên khác là “phương pháp ngây thơ” bởi vì phương pháp này hết sức đơn giản Phương pháp này dồn toàn bộ dữ liệu sang đích và thực hiện chống trùng lặp theo thời gian thực
để giảm bớt dung lượng cần thiết để lưu trữ Hiệu suất của phương pháp Inline này hoàn toàn phụ thuộc vào không gian lưu trữ vì vậy mà không gian lưu trữ càng lớn thì tốc độ
Trang 24xử lý lại càng nhanh Lợi ích của phương pháp Inlien đó là rất dễ để triển khai và giúp làm giảm dung lượng cần thiết cho phần cache Điều bất lợi đó là để đảm bảo cho phương pháp này thật đơn giản nó sử dụng cách tiếp cận cực kì trực tiếp và “thô bạo”
để chia nhỏ và chống trùng lặp dữ liệu và khi mà nó hoạt động thì có thể nó sẽ loại bỏ
“nhầm” các dữ liệu không trùng lặp Hơn nữa vì nó dồn toàn bộ dữ liệu về đích nên dữ liệu trùng lặp và dữ liệu độc nhất bị trộn lẫn với nhau điều này khiến cho tỉ suất chống trùng lặp giảm xuống và khiến cho dung lượng cần để lưu trữ tăng dần lên theo thời gian Một bất lợi khác của phương pháp này đó là rất khó để có thể chia sẻ các index và metadata, chính vì vậy mà phương pháp này nói chung là có tính ứng dụng vào thực tiễn khá thấp
Hình 2.6 Inline
2.2.2 Post-process
Phương pháp này dùng phần cache trên đĩa để lưu trữ thông tin trước khi thực hiện chống trùng lặp Điểm mạnh của phương pháp này chính là hiệu suất cao và khả năng backup dữ liệu nhanh bởi quá trình chống trùng lặp không phải lưu trữ bất cứ thứ gì mà tất cả dữ liệu đã được lưu lại trên cache khi thực hiện chống trùng lặp thì chỉ cần lấy dữ liệu trong đó xử lý rồi lưu dữ liệu đó lại Vì chống trùng lặp được thực hiện sau ki dữ liệu được lưu trữ cho nên những dữ liệu đặc biệt rất khó chống trùng lặp hoặc không thể chống trùng lặp (ví dụ như dữ liệu được mã hóa, bị nén hoặc là những file hình ảnh) có thể được loại trừ từ giai đoạn thực hiện chống trùng lặp cho nên không gian lưu trữ sẽ không bị lãng phí Một lợi ích khác của post-process đó là khả năng chia sẻ index và metadata khiến cho dữ liệu có phần linh động hơn Tuy nhiên điểm yếu của nó là phụ thuộc vào phần cache của đĩa chính vì vậy nó sẽ tốn kém hơn nhiều so với phương pháp inline Tuy nhiên vì các dữ liệu không thể chống trùng lặp không cần thiết phải lưu trữ cho nên về thời gian dài thì post-process sẽ ít tốn kém hơn
Trang 25Hình 2.7 Post-process
2.2.3 Client Base
Phương pháp này cũng có thể được gọi bằng cái tên source-base bởi vì dữ liệu sẽ được chống trùng lặp trước khi nó được chuyển tới đích Tức là khi bắt đầu chuyển dữ liệu lên mạng, thì dữ liệu sẽ được xử lý trên máy khách, lọc bỏ những dữ liệu trùng lặp rồi mới chuyển tới đích Vì vậy mà ưu điểm của phương pháp này chính là làm giảm băng thông cần thiết để chuyển dữ liệu Thực vậy nếu như một file có dung lượng 20
mb sau khi chống trùng lặp chỉ còn lại 16mb thì băng thông cần thiết để chuyển file này
sẽ giảm xuống Ngoài ra vì lượng dữ liệu được chuyển cũng nhỏ hơn cho nên khả năng backup dữ liệu sẽ trở nên nhanh hơn, kết quả là khả năng backup dữ liệu sẽ tăng lên không ít Đương nhiên nó cũng có nhược điểm, đó là việc chống trùng lặp sẽ dồn lên trên máy khách nên yêu cầu về không gian lưu trữ là rất cao, hơn nữa nến chống trùng lặp một lượng dữ liệu lớn thì tốc độ của máy sẽ chậm lại, và rất có khả năng sẽ bị quá tải
Hình 2.8 Client Base
2.2.4 Target-base
Dữ liệu được chống trùng lặp sau khi được chuyển tới đích Tại đây dữ liệu sẽ được xử lý cẩn thận trước khi được lưu trữ Điểm mạnh của phương pháp này là phía
Trang 26client không phải xử lý bất cứ dữ liệu nào, chỉ cần truyền dữ liệu sang đích và phía đích
sẽ giải quyết toàn bộ vấn đề liên quan tới dữ liệu trước khi thực hiện lưu trữ Điểm yếu chính là việc client phải gửi toàn bộ dữ liệu qua mạng việc này khiến cho lượng băng thông sử dụng là khá lớn
Hình 2.10 NAS-Based
2.2.6 SAN-based
Phương pháp này truyền dữ liệu tới đích thông qua Fibre channel (FC) Điểm mạnh của phương pháp này là dễ dàng backup dữ liệu và khi truyền dữ liệu qua SAN thì sẽ có
Trang 27thể đạt được hiệu suất cao nhất Một lợi ích khác của phương pháp này là các phương pháp backup type-based đều sử dụng SAN cho nên phương pháp này được sử dụng một cách dễ dàng mà chỉ thay đổi một chút, thậm chí là không thay đổi quá trình làm việc hiện tại
Hình 2.11 SAN-based
2.2.7 Global
Phương pháp này là sự tổng hợp của source-based, target-based và site-level để làm giảm dung lượng cần thiết để lưu trữ và băng thông dùng để truyền dữ liệu Global giảm thiểu dữ liệu để truyền qua băng thông tốt hơn bất cứ một cách làm nào khác Lí
do mà phương pháp này có hiệu quả tốt như vậy bởi vì nó sử dụng một phương pháp thông mình để giao tiếp giữa các thiết bị Các giao tiếp của Global đó là truyền các metadata đến đích trước khi truyền dữ liệu Sau khi các metadata được so sánh thì đích
sẽ gửi thông điệp cho nguồn và thông báo cho nó biết các dữ liệu đã bị trùng lặp và yêu cầu nó chỉ gửi các dữ liệu độc nhất cho mình Nếu một nguồn cố gắng gửi các dữ liệu
đã được lưu trữ rồi qua cho đích thì đích sẽ nhắc nhở nguồn rằng không phải gửi dữ liệu
đó qua nữa, bởi vì nó đã được lưu trữ rồi Chính vì nhờ cách giao tiếp này cho nên Global có thể gửi nhanh hơn và ít dữ liệu hơn, từ đó giúp tăng hiệu suất làm việc Tuy nhiên phương pháp này cũng có nhược điểm, đó là chi phí của nó cao nhất bởi thực hiện nhiều công đoạn dẫn tới lượng chi phí cần thiết để thực hiện phương pháp này cũng sẽ cao hơn những phương pháp khác khá nhiều
Trang 28Hình 2.12 Global
2.3 Các đoạn có chiều dài cố định và các đoạn có chiều dài linh hoạt
Dựa trên cách chia những các file thành các Block hoặc chia các block ra thành sub-block mà người ta nảy sinh ra một vấn đề mới đó là chia những file(block) đó thành những đoạn có chiều dài cố định hay là chia nó thành các đoạn có chiều dài khác nhau phụ thuộc vào dữ liệu
Vậy chia một file(block) thành những đoạn có chiều dài cố định nghĩa là gì? Đó là phương pháp cắt nhỏ File(block) thành những đoạn có chiều dài bằng nhau, không phân biệt lượng dữ liệu nó lưu trữ bên trong là gì Phương pháp này cho phép ta cắt nhỏ luồng
dữ liệu một cách đều đặn thành từng đoạn và so sánh các đoạn dữ liệu này với nhau Đương nhiên với phương pháp này thì tốc độ xử lý dữ liệu sẽ trở nên nhanh chóng, vì không quan tâm tới lượng dữ liệu bên trong nó như thế nào cho nên ta chỉ cần thực hiện liên tiếp việc chia luồng dữ liệu thành từng đoạn nhỏ có chiều dài bằng nhau dẫn tới tốc
độ chia một luồng dữ liệu sẽ trở nên rất nhanh chóng Đó là lợi ích vậy còn bất lợi? Bất lợi lớn nhất của nó chính là nếu ta thay đổi một đoạn trong số các đoạn thì luồng dữ liệu lúc này trông rất khác với ban đầu Thực vậy bởi mỗi đoạn chỉ có một chiều dài cố định cho nên khi chèn hoặc xóa bớt dữ liệu bên trong mỗi đoạn đi thì luồng dữ liệu sau khi ghép các đoạn vào với nhau khác xa so với ban đầu
Trang 29Hình 2 13 Chia các đoạn có chiều dài cố định [1]
Hình 2.13 thể hiện điểm yếu của việc chia luồng dữ liệu thành các đoạn có chiều dài cố định ABCD là luồng dữ liệu gốc bị chia thành 4 đoạn bằng nhau, và EFGH là luồng dữ liệu đã bị thay đổi sau khi chèn Ta thấy khi chèn thêm dữ liệu vào đoạn A, để đảm bảo việc mỗi đoạn có một chiều dài ngang nhau thì nó sẽ đẩy dữ liệu thừa qua đoạn thứ hai, cứ tiếp tục như vậy cho tới khi đến cuối luồng dữ liệu Ta có thể thấy hai luồng
dữ liệu đã trở nên hoàn toàn khác biệt, chính vì vậy khi ta lưu luồng dữ liệu mới vào thì
sẽ hoàn toàn không thể nào ra điểm khác biệt, cuối cùng hai 8 đoạn dữ liệu A,B,C,D,E,F,G,H là 8 đoạn dữ liệu độc nhất, không thể thực hiện 8 chống trùng lặp trên
8 đoạn này mà phải lưu trữ cả 8 Điều đó dẫn tới việc lãng phí tài nguyên
Vậy còn phương pháp chia các đoạn có chiều dài linh hoạt thì sao? Phương pháp này chia luồng dữ liệu thành các đoạn có chiều dài không bằng nhau phụ thuộc vào điều kiện của người sử dụng, ví dụ như : nội dung dữ liệu… Việc chia như thế này có thể giải quyết triệt để vấn đề của chia thành từng đoạn có độ dài bằng nhau Bởi tính linh hoạt trong chiều dài của mỗi đoạn cho nên khi chèn hoặc xóa dữ liệu ta hoàn toàn không phải
lo tới vấn để ảnh hưởng đến các đoạn khác trong luồng dữ liệu
Hình 2 14 Chia các đoạn có độ dài linh hoạt [1]
Trang 30Trong hình 2.14 ABCD vẫn là luồng dữ liệu gốc còn EBCD là luồng dữ liệu sau khi thêm dữ liệu vào đoạn A Như ta đã thấy, trong hình 2.13 luồng dữ liệu ABCD đã trở thành EFGH hoàn toàn khác biệt với dữ liệu gốc nhưng trong hình 2.14 này, sau khi thêm dữ liệu vào đoạn A thì đoạn A sẽ trở thành đoạn E nhưng các đoạn còn lại không
hề có chút ảnh hưởng nào Vì thế ABCD sẽ trở thành EBCD, trong trường hợp cần so sánh ai luồng dữ liệu này với nhau ta có thể thực hiện chống trùng lặp trên hai luồng dữ liệu này Đó là ưu điểm của cách chia này nhưng nhược điểm của nó cũng rất rõ ràng đó
là độ phức tạp khi phải chia các đoạn dữ liệu, phải xác định rõ yêu cầu rồi mới bắt đầu chia dữ liệu thay vì chỉ việc chia thành các đoạn bằng nhau Chính vì vậy chi phí của nó cũng lớn hơn rất nhiều
Trang 31Chương 3 Ứng dụng độ tương đồng chuỗi trong chống trùng lặp dữ liệu
3.1 Vấn đề của các phương pháp chống trùng lặp cho các tập dữ liệu văn bản có cấu trúc dạng bảng
Như đã nói ở chương 2 các phương pháp chống trùng lặp có thể dùng cho tất cả
dữ liệu: block level hashing và sub-block level hashing Đối với một cấu trúc dạng bảng các phương pháp này có thể chia mỗi bảng thành các hàng, các cột hoặc các ô Các hàng, các cột và các ô ở đây có thể đại diện cho block hoặc sub-block và với việc xử lý dữ liệu các dữ liệu trong mỗi block/sub-block kia ta có thể xử lý được những dữ liệu trùng lặp Đây là cách thức đơn giản nhất để giải quyết vấn đề này, tuy nhiên các phương pháp này vẫn còn thiếu sót Điểm yếu của phương pháp này nằm ở chỗ cho dù chỉ có một sai sót nhỏ trong một chuỗi có thể dẫn tới sự khác biệt hoàn toàn của các giá trị hash nhưng trên thực tế lỗi trong chuỗi kia có thể xuất phát từ lỗi nhập liệu Những lỗi thường gặp như gõ nhầm, gõ thiếu, gõ thừa thường xuyên diễn ra khi nhập dữ liệu từ bàn phím, lượng dữ liệu càng lớn thì sai sót càng nhiều Những sai lầm đó khiến cho dữ liệu có thể
bị trùng lặp, cản trở quá trình xử lỹ dữ liệu trước khi thực hiện, khiến dữ liệu không được xử lý một cách tốt nhất
Ví dụ như một người nhập nhầm chuỗi kí tự Nguyễn Tiến An vào 2 ô và một trong hai ô đó vô tình đã bị gõ nhầm từ “An” thành “Ân”, do đó lúc này trong tập dữ liệu có
2 chuỗi khác nhau là “Nguyễn Tiến An” và “Nguyễn Tiến Ân”, sau khi nhập xong dữ liệu giả sử người đó lại dùng một chương trình chống trùng lặp dữ liệu sử dụng thuật toán MD5, trong quá trình hash dữ liệu để lấy ra các giá trị hash, 2 chuỗi nói trên sẽ mang 2 giá trị hoàn toàn khác nhau là: d6225385ba81f65bea19f01f6030cf54 cùng 9c4e7b98e1325661fdc857954566d62d Bởi vì 2 giá trị này là khác biệt cho nên chương trình không thể nhận ra 2 chuỗi vốn là một cho nên cả 2 chuỗi đều được giữ lại Đây chính là nhược điểm của các phương pháp chống trùng lặp thông thường
Hình 3.1 Sử dụng phương pháp chống trùng lặp bình thường
Trang 32Trong hình 3.1 là kết quả sau khi sử dụng một phương pháp chống trùng lặp bình thường lên một tập cơ sở dữ liệu khoảng 14 đối tượng Bên tay trái là dữ liệu gốc, bên tay phải là dữ liệu sau khi được xử lý Như ta thấy dòng 1 và dòng 3 có dữ liệu giống hệt nhau đã được xóa đi nhưng bên trong tập dữ liệu gốc vẫn còn rất nhiều dòng có giá trị giống nhau và phương pháp này không thể xử lý được Kết quả dẫn tới việc dữ liệu trùng lặp còn lại rất nhiều Để có thể giải quyết triệt để vấn đề này, cần tới một phương pháp có thể nhận biết được khác biệt trong dữ liệu đối chiếu với dữ liệu gốc và xử lý nó cho dù độ chính xác của các dữ liệu không phải là 100% Vì vậy tôi đề xuất một cách giải quyết khác thay thế cho bước hashing trong hai phương pháp chống trùng lặp trên,
đó là độ tương đồng giữa 2 chuỗi ký tự ký tự Thay vì phải hash dữ liệu ra thì phương pháp này sẽ tính độ tương đồng giữa 2 dòng rồi dựa vào độ tương đồng đó để xử lý dữ liệu Phương pháp mới không cần dữ liệu phải giống hệt nhau mà nó sẽ tính ra độ tương đồng giữa các dữ liệu và quyết định xem dữ liệu đó có bị trùng lặp không rồi sẽ đưa ra phương án giải quyết
3.2 Ứng dụng của độ tương đồng chuỗi vào chống trùng lặp
3.2.1 Sử dụng khoảng cách chuỗi
Để giải quyết vấn đề: nhằm giải quyết vấn đề về của chống trùng lặp thông thường, tôi đã thay thế bước hashing dữ liệu thông thường bằng việc tính toán độ tương đồng của chuỗi (xem chi tiết trong tài liệu [6]) Bằng cách thay thế này là hoàn toàn có thể giải quyết các vấn đề còn tồn đọng, việc nhận biết các lỗi sai do đánh máy sẽ trở nên tốt hơn nhờ việc tính toán độ tương đồng, phương pháp chống trùng lặp gốc phụ thuộc rất nhiều vào độ chính xác của dữ liệu giống như đã phân tích trong phần 3.1, sự sai lệch trong lỗi nhập liệu sẽ dẫn tới sự thiếu chính xác trong phương pháp chống trùng lặp thông thường nhưng khi áp dụng phương pháp mới này, thì dữ liệu không nhất thiết phải chính xác một trăm phần trăm như trước nữa, dữ liệu cho dù có độ lệch rất nhỏ thì phương pháp này vẫn có thể nhận biết được sự sai khác đó và xử lý những dữ liệu bị trùng lặp kia Bằng cách tính toán độ tương đồng chuỗi sẽ giúp tôi tính toán được sự giống nhau giữa các dữ liệu và nếu như chúng có độ tương đồng lớn thì có thể coi như
là những dữ liệu bị trùng lặp
Bên cạnh việc tính độ tương đồng tôi cần tới một tham số cận dưới, chỉ khi độ tương đồng giữa 2 chuỗi vượt qua cận dưới này thì 2 chuỗi dữ liệu mới có thể coi là trùng lặp được Cận dưới rất cần thiết trong việc tính độ tương đồng bởi : nó quyết định
2 chuỗi có phải là trùng lặp hay không
Thực vậy, cận dưới của độ tương đồng quyết định việc 2 chuỗi giống nhau tới đâu,
nó là quy định của người sử dụng về việc coi 2 chuỗi có tỉ lệ giống nhau bao nhiêu thì
có thể coi là trùng lặp Chỉ khi nào độ tương đồng giữa 2 chuỗi vượt qua được cận dưới
Trang 33thì mới có thể xử lý chúng Ngược lại nếu chúng không vượt qua được giá trị cận dưới thì chúng không phải trùng lặp và sẽ được giữ lại
Tuy nhiên việc đặt cận dưới như thế nào cũng dựa vào yêu cầu của người sử dụng cũng như đặc thù trong các tập văn bản dữ liệu, có những yêu cầu về độ chính xác cao hay thấp, cần an toàn tuyệt đối hay chỉ cần dung lượng lưu trữ Cân nhắc trong việc đặt cận dưới hết sức cần thiết bởi nó sẽ quyết định kết quả mà ta thu được Giả như đặt cận dưới quá cao, vậy thì có thể bỏ sót một vài dữ liệu nhưng nếu đặt cận dưới quá thấp thì lại có thể xóa nhầm vài dữ liệu không trùng lặp đi và kết quả thu được sẽ không theo ý muốn Thậm chí là gây mất mát dữ liệu ngoài ý muốn, tuy nhiên không có một cách tổng quát nào để tìm được giá trị cận dưới này, các tốt nhất có thể sử dụng đó là dựa vào đặc thù của các tập văn bản dữ liệu cần giải quyết và sử dụng phương pháp thống kê với một lượng văn bản dữ liệu đầu vào nhất định
Dưới đây là sơ đồ mới cho phương pháp sử dụng độ tương đồng chuỗi vào chống trùng lặp:
Hình 3.2 Quy trình chống trùng lặp sử dụng độ tương đồng chuỗi
Các bước trong quá trình đánh giá độ tương đồng chuỗi:
Hình 3.3 Quy trình đánh giá độ tương đồng chuỗi
Chia 1 File thành các Block/Subblock
Đánh giá
độ tương đồng chuỗi
Tính độ tương đồng chuỗi
So sánh độ tương đồng
đó với cận dưới