Đã qua lâu rồi thời của phương pháp tiếp cận một cơ sở dữ liệu phù hợp với tất cả.
Với các yêu cầu ngày càng tăng về vận tốc, hiệu suất và sự nhanh nhẹn, nhiều kho dữ liệu đã xuất hiện nhằm giải quyết một vấn đề cụ thể. Chúng tôi có cơ sở dữ liệu quan hệ, kho lưu trữ tài liệu, cơ sở dữ liệu chuỗi thời gian, cơ sở dữ liệu cột, công cụ tìm kiếm toàn văn.
Khá phổ biến khi thấy nhiều kho dữ liệu hoạt động cùng nhau trong cùng một môi trường.
Vậy MariaDB AX phù hợp với hình ảnh như thế nào? Nó so sánh với MariaDB TX như thế nào và nó giải quyết vấn đề gì?
Trong bài đăng trên blog này, chúng ta sẽ xem xét về MariaDB AX và xem tại sao bạn có thể muốn sử dụng nó.
MariaDB AX là gì?
Trước tiên, điều đầu tiên là MariaDB AX là gì?
Nó là một kho lưu trữ cột, và nó lưu trữ dữ liệu của nó theo ... cột! Nó được triển khai như một công cụ riêng biệt trong cơ sở dữ liệu MariaDB 10.3.
Như bạn có thể biết, MySQL và MariaDB được thiết kế để sử dụng các công cụ lưu trữ có thể cắm được. Mọi công cụ lưu trữ, có thể là InnoDB, Aria, MyRocks, Spider hoặc bất kỳ công cụ nào khác đều là plugin.
Theo cách tương tự, MariaDB AX sử dụng công cụ ColumnStore:
MariaDB [(none)]> SHOW ENGINES\G
*************************** 1. row ***************************
Engine: Columnstore
Support: YES
Comment: Columnstore storage engine
Transactions: YES
XA: NO
Savepoints: NO
Điều này dẫn đến một sự kết hợp thú vị. Việc phân tích cú pháp SQL được thực hiện bởi MariaDB, do đó bạn có thể mong đợi làm việc với cú pháp truy vấn rất giống với những gì bạn đã quen sử dụng trong MariaDB. Điều này cũng làm cho việc kết hợp quyền truy cập vào cả MariaDB AX và MariaDB TX trong cùng một ứng dụng cũng trở nên dễ dàng hơn. Không cần bất kỳ trình kết nối hoặc thư viện cụ thể nào để kết nối với hai kho dữ liệu. Tất cả có thể được thực hiện bằng cách sử dụng thư viện máy khách MySQL hoặc MariaDB. Bạn cũng có thể sử dụng MaxScale cho cả hai kho dữ liệu, điều này có thể giúp xây dựng tính khả dụng cao cho MariaDB AX.
Tại sao chúng ta nên sử dụng kho dữ liệu Columnar?
Hãy xem qua phần giới thiệu ngắn về ý tưởng đằng sau kho dữ liệu dạng cột.
Điều gì làm cho MariaDB AX khác với MariaDB TX?
Sự khác biệt chính là cách dữ liệu được cấu trúc. Trong cơ sở dữ liệu điển hình, dữ liệu được lưu trữ dưới dạng hàng.
Id, Product, Price, Code, Warehouse
1, Door, 10, 12334, EU1
2, Window, 9, 9523, EU1
3, Glass, 12, 97643, EU2
Như bạn thấy, chúng tôi có ba hàng, mỗi hàng chứa tất cả dữ liệu về một mục nhập sản phẩm.
Vấn đề là, cách lưu trữ dữ liệu này không thực sự hiệu quả khi bạn chỉ muốn lấy một tập hợp con của dữ liệu này. Giả sử bạn chỉ muốn lấy cột “Sản phẩm” và “Giá” - để làm điều đó, bạn phải đọc toàn bộ các hàng, tất cả dữ liệu và sau đó loại bỏ các cột không cần thiết. Nó cũng phức tạp để sắp xếp dữ liệu. Nếu bạn muốn sắp xếp tập dữ liệu từ sản phẩm đắt nhất đến rẻ nhất, bạn phải đọc mọi thứ và sau đó thực hiện sắp xếp.
Chúng ta đều biết rằng cơ sở dữ liệu sử dụng các chỉ mục để tăng tốc độ truy cập. Chỉ mục được cấu trúc theo cách chứa nội dung của cột được lập chỉ mục cũng như một con trỏ đến hàng đầy đủ (trong InnoDB, đó là Khóa chính). Ví dụ:một chỉ mục trên cột “Sản phẩm”, giả sử rằng “Id” là Khóa chính, có thể giống như sau:
Product, Id
Door, 1
Window, 2
Glass, 3
Điều này giúp tăng tốc độ truy cập vào dữ liệu vì không cần phải đọc toàn bộ hàng chỉ để tìm giá trị trong cột "Sản phẩm". Khi cơ sở dữ liệu tìm thấy nó, nó có thể đọc phần còn lại của hàng (nếu cần) bằng cách đi theo con trỏ.
Trong một cửa hàng chuyên mục, mọi thứ hoàn toàn khác. Dữ liệu được cấu trúc không phải dưới dạng hàng mà ở dạng cột. Đối với một số mở rộng, điều này tương tự như chỉ mục. Bảng của chúng tôi trong kho dữ liệu dạng cột có thể trông giống như sau:
Id: 1, 2, 3
Product: Door, Window, Glass
Price: 10, 9, 12
Code: 12334, 9523, 97643
Warehouse: EU1, EU1, EU2
Trong MariaDB AX, các cột được lưu trữ trong các tệp riêng biệt, mỗi mục nhập cho một “hàng” nhất định bắt đầu ở cùng một khoảng chênh lệch.
Ưu điểm chính ở đây là nếu bạn muốn chạy một truy vấn chỉ hoạt động với một tập hợp con dữ liệu, bạn chỉ cần đọc dữ liệu từ các cột có liên quan đến truy vấn.
Trong ví dụ của chúng tôi trước đó, thay vì đọc toàn bộ tập dữ liệu, chúng tôi chỉ có thể tải dữ liệu cho các cột "Sản phẩm" và "Giá". Nó làm giảm dữ liệu cần thiết để được truy cập trên đĩa và tăng tốc quá trình.
Điều cũng quan trọng, lưu trữ dữ liệu trong các cột làm cho chúng ít khác biệt hơn, điều này làm cho nó nén tốt hơn. Ví dụ:trong cột "Kho hàng", chúng tôi chỉ có hai loại mục nhập. Ngay cả trong kịch bản thế giới thực, rất có thể chúng ta sẽ kết thúc với một số lượng kho nhỏ so với số lượng sản phẩm. Điều này làm cho cột "Kho" là mục tiêu rất tốt để nén.
Kết quả của tất cả những điều này, cơ sở dữ liệu dạng cột có thể xử lý tập dữ liệu lớn tốt hơn và có thể truy vấn nó theo cách hiệu quả hơn so với cơ sở dữ liệu tập trung vào OLTP “chuẩn”.
Tại sao tôi nên sử dụng MariaDB AX?
Truy cập đĩa là một nút thắt cổ chai lớn trong cơ sở dữ liệu. Kho dữ liệu dạng cột cải thiện hiệu suất bằng cách giảm lượng dữ liệu cần đọc từ đĩa. Nó chỉ đọc dữ liệu cần thiết để trả lời truy vấn.
Tất nhiên, MariaDB AX không phải là kho dữ liệu dạng cột duy nhất hiện có. Có nhiều ứng dụng khác như Clickhouse hoặc Apache HBase.
Sự thật là không có tùy chọn nào khác hỗ trợ cú pháp SQL đầy đủ như MySQL. Chúng yêu cầu các trình kết nối khác nhau, cách tiếp cận khác nhau để truy vấn dữ liệu trong khi MariaDB AX có thể được truy vấn giống như bạn truy vấn MariaDB ‘bình thường’.
Điều quan trọng nữa là MariaDB AX sử dụng công cụ ColumnStore, nên việc kết hợp nó với các công cụ khác là điều hoàn toàn ổn. Bạn có thể kết hợp và kết hợp các bảng InnoDB và ColumnStore trong cùng một truy vấn mà không gặp bất kỳ vấn đề gì.
Trên hết, các công cụ đi kèm với MariaDB TX, như MaxScale, sẽ hoạt động tốt với MariaDB AX, giúp dễ dàng hơn trong việc xây dựng một môi trường tích hợp, dễ sử dụng. Vì vậy, khi bạn đang chạy ClusterControl với MariaDB 10.3 và MaxScale, bạn có thể dễ dàng thêm MariaDB AX vào hỗn hợp và nó sẽ hoạt động với các phần khác của thiết lập.
MariaDB AX đi kèm với các công cụ nhằm giúp chuyển dữ liệu từ các nguồn khác. Nếu bạn tình cờ sử dụng Kafka hoặc Spark, có các trình kết nối để sử dụng khi nhập dữ liệu từ các nguồn đó vào MariaDB AX.
Ngoài ra, mặc dù sao chép thường xuyên giữa MariaDB TX (InnoDB) và MariaDB AX (ColumnStore) không hoạt động tốt do các hạn chế của ColumnStore (luôn tốt hơn nếu thực hiện chèn hàng loạt trong kho dữ liệu cột hơn là chèn đơn lẻ, vì nó được thực hiện trên bản sao), nó là có thể xây dựng một đường dẫn bao gồm MaxScale được định cấu hình làm máy chủ binlog và bộ định tuyến Avro CDC, Bộ điều hợp dữ liệu MaxScale CDC và MariaDB AX, sẽ nhận dữ liệu từ bộ điều hợp gần như trong thời gian thực.
Chúng tôi hy vọng bài đăng trên blog này sẽ cung cấp cho bạn một số thông tin chi tiết về MariaDB AX là gì và nó có thể được sử dụng như thế nào cùng với môi trường MariaDB TX do ClusterControl triển khai và quản lý (tải xuống miễn phí!).