High Cardinality là gì?

03:36 PM 11/05/2019 In bài viết

Image title

High cardinality là gì?

Cardinality đề cập đến số lượng giá trị trong một tập hợp (set). Đôi khi số lượng giá trị của tập hợp nhỏ (low cardinality) và có những lúc số lượng giá trị của tập hợp lớn (high cardinality). Bạn có thể thấy ví dụ về hình ảnh những viên kẹo M & M trong hình minh họa, nhưng thông thường số lượng giá trị của bộ dữ liệu khá nhỏ (6 đơn vị).

Image title

Nếu bạn đang làm việc với cơ sở dữ liệu, đặc biệt là với dữ liệu chuỗi thời gian, thì bạn có thể phải đối mặt với những thách thức xử lý dữ liệu high cardinality.

Có thể nói, high cardinality theo chuỗi thời gian là một vấn đề phổ biến trong IoT công nghiệp (ví dụ: các lĩnh vực sản xuất, dầu khí, tiện ích, v.v...), cũng như một số công việc giám sát và khối lượng dữ liệu sự kiện.

High Cardinality cũng là một chủ đề được các nhà phát triển tranh luận rất nhiều, và có rất nhiều câu hỏi vẫn tồn tại xung quanh vấn đề này.

Vì những hạn chế của một số cơ sở dữ liệu chuỗi thời gian phổ biến đã khiến High cardinality trở thành một vấn đề nổi cộm. Trong thực tế, vấn đề dữ liệu high cardinality sẽ được giải quyết nếu người dùng chọn đúng cơ sở dữ liệu.

Trong thế giới cơ sở dữ liệu, cardinality đề cập đến số lượng giá trị duy nhất có trong một cột hoặc một trường cụ thể của cơ sở dữ liệu.

Tuy nhiên, với dữ liệu chuỗi thời gian, mọi thứ trở nên phức tạp hơn một chút.

Dữ liệu chuỗi thời gian có xu hướng được ghép nối với siêu dữ liệu (đôi khi được gọi là các “tag - thẻ”) để mô tả dữ liệu đó. Thông thường, dữ liệu chuỗi thời gian chính hoặc siêu dữ liệu đó được lập chỉ mục nhằm nâng cao hiệu suất truy vấn, giúp người dùng có thể nhanh chóng tìm thấy các giá trị khớp với tất cả các thẻ được chỉ định.

Cardinality của bộ dữ liệu chuỗi thời gian thường được xác định bởi sự kết hợp chéo giữa các cardinality của từng cột được lập chỉ mục riêng lẻ. Vì vậy, nếu các viên kẹo M&Ms có 6 màu, nhưng cũng có 5 hương vị M&Ms (vị nguyên bản, đậu phộng, hạnh nhân, bánh quy và chocolate), thì tổng số tùy chọn cho các viên kẹo M&M sẽ là 6 x 5 = 30 (nói cách khác, cardinality là 30). Có những chỉ số phù hợp sẽ cho phép người dùng tìm thấy tất cả các viên kẹo M&Ms có màu xanh và có vị chocolate.

Nếu bạn có nhiều cột được lập chỉ mục, mỗi cột có một số lượng lớn các giá trị duy nhất, thì giá trị của các kết hợp chéo đó sẽ rất lớn. Đó chính là định nghĩa của high cardinality khi nói về một bộ dữ liệu chuỗi thời gian.

Hãy xem xét ví dụ sau:

High cardinality trong IoT công nghiệp

Hãy tưởng tượng một môi trường IoT, nơi có thiết bị lớn, cồng kềnh để khai thác, nghiền và phân loại đá trong một mỏ đá cụ thể.

Giả sử có 10.000 thiết bị, mỗi thiết bị có 100 cảm biến, chạy 10 phiên bản firmware khác nhau, trải rộng trên 100 trang web:

timestamp

temperature

mem_free

equipment_id

sensor_id

firmware_version

site_id

(lat,long)

2019-04-04 09:00:00

85.2

10.2

1

98

1.0

4

(x,y)

2019-04-04 09:00:00

68.8

16.0

72

12

1.1

20

(x1,y1)

2019-04-04 09:00:00

100.0

0.0

34

58

2.1

55

(x2,y2)

2019-04-04 09:00:00

84.8

9.8

12

75

1.4

81

(x3,y3)

2019-04-04 09:00:00

68.7

16.0

89

4

2.1

13

(x4,y4)

...

             

Số lượng giá trị (cardinality) tối đa của bộ dữ liệu này có thể đạt 1 tỷ (10.000 x 100 x 10 x 100).

Giả sử các thiết bị cũng có thể di chuyển, và người dùng muốn lưu trữ vị trí GPS chính xác (lat, long – vĩ độ, kinh độ), đồng thời sử dụng siêu dữ liệu được lập chỉ mục để truy vấn. (Vĩ độ, kinh độ) là một trường liên tục, trái ngược với một trường rời rạc như device_id (ID của thiết bị). Do đó nếu người dùng lập chỉ mục trên vị trí, số lượng cardinality tối đa của bộ dữ liệu này trở nên vô cùng lớn (không giới hạn).

Cơ sở dữ liệu quan hệ được thiết kế cho chuỗi thời gian có thể xử lý các vấn đề về High cardinality như thế nào?

Các cơ sở dữ liệu khác nhau có các cách tiếp cận khác nhau để xử lý High cardinality. Suy cho cùng, hiệu suất của cơ sở dữ liệu khi làm việc với bộ dữ liệu High cardinality có thể được truy nguyên từ cách nó được thiết kế ban đầu.

Nếu bạn đang làm việc với nhiều dữ liệu chuỗi thời gian và sử dụng cơ sở dữ liệu quan hệ, một cấu trúc dữ liệu để lập chỉ mục - B tree.

Dựa vào cấu trúc dữ liệu của B -tree để lập chỉ mục dữ liệu có một số lợi ích cho các bộ dữ liệu high cardinality:

  • Bạn có thể có được sự hiểu biết rõ ràng về cách thức cơ sở dữ liệu thực hiện. Miễn là các chỉ mục và dữ liệu cho tập dữ liệu bạn muốn truy vấn phù hợp với bộ nhớ.
  • Bạn có quyền kiểm soát các cột để lập chỉ mục, bao gồm khả năng tạo các chỉ mục ghép trên nhiều cột. Bạn cũng có thể thêm hoặc xóa các chỉ mục bất cứ lúc nào bạn muốn, ví dụ, nếu khối lượng công việc truy vấn của bạn thay đổi.
  • Bạn có thể tạo các chỉ mục trên các trường rời rạc và liên tục.  Đặc biệt vì B tree hoạt động tốt khi so sánh bằng cách sử dụng bất kỳ các câu lệnh sau đây: <, <=, =,> =,>, BETWEEN, IN, IS NULL, IS NOT NULL. Các truy vấn ví dụ bên trên (LỰA CHỌN * TỪ sensor_data tại mem_free = 0 và LỰA CHỌN * TỪ cảm biến tại nhiệt độ> 90) sẽ chạy theo hàm logarit, hoặc O (log n), thời gian.

Mặc dù có những cách tiếp cận khác mà cơ sở dữ liệu chuỗi thời gian sử dụng cho high cardinality, việc sử dụng cấu trúc B tree đã được chứng minh là đáng tin cậy.

Hợp Trương