Phân tích,khai thác dữ liệu dưới dạng văn bản tài liệu(P1)
Phân tích dự đoán, kinh doanh thông minh, và khai phá dữ liệu nói chung tất cả các nhu cầu lưu trữ và xử lý các cấu trúc dữ liệu phức tạp và thường rất khác nhau như thông tin được xử lý, phân tích, và tổng kết. Trong bài viết này, tôi tìm hiểu làm thế nào để sử dụng cơ sở dữ liệu dựa trên văn bản ...
Phân tích dự đoán, kinh doanh thông minh, và khai phá dữ liệu nói chung tất cả các nhu cầu lưu trữ và xử lý các cấu trúc dữ liệu phức tạp và thường rất khác nhau như thông tin được xử lý, phân tích, và tổng kết. Trong bài viết này, tôi tìm hiểu làm thế nào để sử dụng cơ sở dữ liệu dựa trên văn bản cho việc phân tích và xử lý dữ liệu như là một phần của giải pháp tổng quan về cơ sở dữ liệu của bạn.
I, Kiến trúc cơ sở dữ liệu văn bản (Document Database) Một trong những thành phần quan trọng của tất cả các Document Database (cơ sở dữ liệu văn bản) là chúng có thể xử lý và làm việc với các cấu trúc lớn hơn bình thường. Đặc biệt, do tính chất phân phối của nó và cách thức khác nhau trong việc lưu trữ dữ liệu về mặt vật lý, thì đó là nơi lý tưởng để xử lý một lượng dữ liệu khổng lồ, thường là trong khai phá dữ liệu.
** 1. Schema-less (không có lược đồ): ** Cơ sở dữ liệu văn bản không cần phải xác định trước cấu trúc của dữ liệu được lưu trữ trong cơ sở dữ liệu. Theo cơ sở dữ liệu quan hệ (RDBMS) truyền thống, bạn xác định cấu trúc của các bảng mà các dữ liệu được lưu trữ trong đó và thử dự đoán nội dung, các giá trị có thể, và cấu trúc của thông tin. Đối với cơ sở dữ liệu văn bản, bạn có thể lưu trữ thông tin vào các tài liệu mà không cần phải lo lắng về cấu trúc, cho dù bạn có nhiều trường, hoặc thậm chí trong mối quan hệ một-nhiều và nhiều-nhiều. Thay vào đó bạn có thể tập trung vào nội dung thông tin chính mà bạn đang quan tâm
** 2. Logical objects (Các đối tượng logic) ** chúng ta thường chia nhỏ các thành phần khác nhau của dữ liệu theo nhiều cách khác nhau, mặc dù trên thực tế chúng ta vẫn chỉ chọn ra các thành phần của cấu trúc tổng thể đó. Cấu trúc tài liệu thay đổi theo quan điểm đó. Thay vì nhìn một cách riêng lẻ, các điểm dữ liệu rời rạc, tài liệu có thể trông giống như các đối tượng tổng thể. Dò tìm thông tin về thu thập dữ liệu, ví dụ, có thể yêu cầu tất cả các thông tin về đối tượng tại chỗ, mặc dù thu thập dữ liệu khác nhau có thể có những phần tử nhạy cảm khác nhau, khác nhau cả về số lượng, và mức độ phức tạp.
** 3. Migratory Structure (Cấu trúc động)** Với một cấu trúc dựa trên văn bản (document-based structure), bởi vì cấu trúc của dữ liệu là cố định, việc thích nghi cấu trúc cho các phiên bản mới và các định dạng khác nhau của dữ liệu ban đầu là khó khăn và phức tạp. Hoặc là bạn cần phải tạo một bảng mới hoặc sửa đổi các bảng hiện có để đối phó với cấu trúc mới, điều đó có nghĩa là chuyển đổi tất cả các bản ghi đã được tạo trước đó để phù hợp với cấu trúc mới. Với một cơ sở dữ liệu văn bản, cấu trúc của tài liệu có thể được sửa đổi. Trên thực tế, cấu trúc của tài liệu cá nhân có thể khác nhau. Bởi vì bạn luôn phải xem xét với toàn bộ tài liệu, ứng dụng của bạn không cần thay đổi cho đến khi nó cần được xử lý để phù hợp với các dữ liệu mới.
Điều đầu tiên cần xem xét là định dạng của dữ liệu. Cơ sở dữ liệu văn bản có thể lưu trữ bất kỳ thông tin nào, nhưng định dạng cấu trúc được sử dụng rộng rãi nhất là JSON, một dạng đối tượng ký hiệu từ ngôn ngữ JavaScript. Nó cho phép bạn lưu trữ các dữ liệu dạng chuỗi, số, mảng, và mẫu tin (dạng băm), và sự kết hợp của các kiểu dữ liệu cơ bản đó.
** Liệt kê 1. Tài liệu theo dõi mực nước và nhiệt độ từ một bể nước bên ngoài **
{ "datestring": "Tue Nov 30 01:40:30 2010", "hour": 1, "min": 40, "waterlevel": 96, "day": 30, "mon": 11, "year": 2010, "temperature": "28.64" }
Liệt kê 2. Tài liệu theo dõi nhiệt độ của bể tại ba thời điểm khác nhau
{ "datestring": "Tue Nov 30 02:06:21 2010", "temperature": { "mid": 23.2148953489378, "top": 23.6984348277329, "bot": 23.0212211444848 } }
** II, Exchanging data (Trao đổi dữ liệu)**
Nếu bạn có sẵn dữ liệu trong một RDBMS (hệ quản lí cơ sở dữ liệu quan hệ), chẳng hạn như IBM DB2, thì bạn có thể sử dụng một cơ sở dữ liệu văn bản để đơn giản hóa và thống nhất một cách thông thường hơn các dữ liệu khác nhau vào các tài liệu mà có thể được xử lý bởi một cơ sở dữ liệu văn bản để tận dụng ưu điểm của định dạng thống nhất.
Bạn có thể nghĩ đó là sai lầm khi thực hiện thao tác này: Nếu nó đã có trong một cơ sở dữ liệu thì tại sao di chuyển nó? Tuy nhiên những giải pháp của hệ quản trị cơ sở dữ liệu quan hệ đã được sử dụng trong nhiều năm để lưu trữ thông tin văn bản, các phiên bản khác nhau và chỉnh sửa dữ liệu bảng. Một cơ sở dữ liệu văn bản có thể là một cách hiệu quả của việc thống nhất này thành một cấu trúc có thể sử dụng được map/reduce (ánh xạ/ rút gọn) và các kỹ thuật khác.
Quá trình đơn giản nhất là tải các đối tượng khi chúng được định dạng và cấu trúc trong cơ sở dữ liệu. Điều này sẽ dễ dàng nếu bạn đang sử dụng một hệ thống ORM, chuyển mô hình dữ liệu của bạn sang mô hình đối tượng. Ngoài ra, bạn có thể thực hiện quá trình này bằng tay. Đoạn mã trong Liệt kê 3 thực hiện các hoạt động bằng cách lấy một bản ghi thành phần phức tạp thông qua chức năng biên dịch các câu lệnh SQL để tạo ra một đối tượng bên trong, định dạng cho JSON và sau đó ghi vào cơ sở dữ liệu văn bản (trong trường hợp này là CouchDB):
**1, Hoạt động tải (load) đối tượng của bạn **
foreach my $productid (keys %{$products}) { my $product = new Product($fw,$productid); my $id = $product->{title}; $id =~ s/[ ',()]//g; my $record = { _id => $id, title => $product->{title}, componentcount => $product->{componentcount}, buildtime => $product->{metadata_bytag}->{totalbuildtime}, testtime => $product->{metadata_bytag}->{totaltesttime}, totaltime => $product->{metadata_bytag}->{totaltime}, keywords => [keys %{$product->{keywordbytext}} ], }; foreach my $component (@{$product->{components}}) { push(@{$record->{component}}, componentqty => $component->{'qty'}, component => $component->{'componentdesc'}, componentcode => $component->{'componentcode'}, } ); } my $req = HTTP::Request->new('POST' => $base); $req->header('Content-Type' => 'application/json'); $req->content(to_json($record)); my $res = $ua->request($req); }
*** III, Xử lý dữ liệu khi trích xuất**
Trong một RDBMS (hệ quản trị cơ sở dữ liệu quan hệ) điển hình, cấu trúc bao gồm các bảng và các lĩnh vực dựa trên cách bạn muốn mà thông tin được trích xuất sau đó. Ví dụ, với các thông tin ghi nhật ký (log), bạn có thể kết hợp một bảng điểm nhật ký (bao gồm ngày tháng) với một bảng điểm dữ liệu có chứa các dữ liệu nhật ký cụ thể. Bạn có biết rằng từ quá trình đó bạn có thể thực hiện một liên kết để kết nối các điểm nhật ký với các dữ liệu thời gian của bạn đến với thông tin của nhiệt độ và mức nước như vậy bạn có thể theo dõi và giám sát các giá trị theo thời gian
** Hình 1. Thực hiện một phép nối ** Việc xử lý các thông tin được thực hiện tại các đầu vào, tách các thông tin để nó có thể chèn vào các bảng và và sau đó hợp nhất lại tại thời điểm đầu ra bởi sự kết hợp thông tin. Quá trình này đòi hỏi bạn biết bạn muốn các thông tin phản hồi , được kết nối, và xử lý khi nó được hiển thị như thế nào. Bạn chỉ có thể viết một câu lệnh SQL khi bạn biết cấu trúc bảng.
Với một cơ sở dữ liệu văn bản, nó là quá trình xử lý các dữ liệu thô tạo ra thông tin theo cách nhìn hài hòa để cho phép dữ liệu được xử lý, cho dù đó là dữ liệu dựa trên giá trị hoặc dữ liệu chuyên đề và văn bản. Thông tin này được đưa vào nhiều tài liệu, và hệ thống map/reduce xử lý thông tin đó và tạo ra một bảng cấu trúc từ dữ liệu (xem Hình 2 ).
Hình 2. Tạo ra một bảng có cấu trúc từ các dữ liệu
Với cơ sở dữ liệu văn bản, bạn xử lý thông tin sau khi nó đã được chèn vào. Điều đó có nghĩa rằng bạn có thể xử lý và thậm chí thay đổi cách dữ liệu được trích xuất trong khi vẫn còn sử dụng và xử lý các dữ liệu thô ở định dạng ban đầu của nó. Trong suốt quá trình, bạn có được sự linh hoạt hoàn thiện về cách thông tin cần được báo cáo, mà không bị thất thoát bất kỳ thông tin ngữ cảnh nào.
Tạm thời sẽ dừng lại ở đây với dữ liệu văn bản dạng json có thể trao đổi dữ liệu và xử lý dữ liệu khi trích xuất . Phần 2 tới sẽ là Map/Reduce . Map để rút trích ra thông tin, và Reduce để đơn giản hóa và tóm tắt thông tin. Map/Reduce là một phương thức thực tế để phân tích và xử lý khối lượng lớn dữ liệu.