Posts

Tăng tốc truy vấn bằng Materialized View - Apache Doris

 Tăng tốc truy vấn bằng Materialized View - Apache Doris Giới thiệu Materialized view là 1 data set được tính toán sẵn ( dựa vào câu SELECT ) và được lưu trữ trong 1 bảng đặc biệt trong Doris Khi nào nên sử dụng Materialized view: Phục vụ cho các câu Detailed Data Query (1) và Fixed-Dimensional Query (2) Truy vấn chỉ liên quan đến một phần nhỏ các cột hoặc hàng trong bảng. Truy vấn chứa một số thao tác xử lý tốn nhiều thời gian, chẳng hạn như các thao tác aggregate trong thời gian dài. Truy vấn cần khớp với các prefix index khác nhau ( Duplicate Model ). (1) Detailed Data Query : các câu query này thường đọc dữ liệu ở mức chi tiết, ko có pre-aggregation.  (2) Fixed-Dimensional Query : ngược lại với Detailed Data Query, các câu query dạng này tập trung vào pre-aggregation các chiều (column) cụ thể, cho phép thời gian phân tích và truy vấn nhanh hơn đối với các chiều (column) đó. Hạn chế Nếu cột điều kiện của câu DELETE ( ví dụ DELETE FROM abc WHERE [cột điều kiện] = ...

Sort Key and Prefix Index

Image
Sort Key and Prefix Index Index Principles Doris lưu trữ data trong 1 cấu trúc tương tự SSTable ( Sorted String Table ). Cấu trúc này là 1 cấu trúc dữ liệu có thứ tự ( tương tự như List trong Java ), nó có thể được sắp xếp và lưu trữ dựa vào 1 hoặc nhiều cột chỉ định. Với cấu trúc dữ liệu như vậy, với điều kiện tìm kiếm trên tất cả hoặc 1 phần các cột được sắp xếp sẽ đem lại hiệu năng cao. Dựa vào sorted keys, Doris có thêm 1 cái gọi là prefix index. Data trong bảng được lưu trữ 1 cách logical trong các Data Block dựa vào số lượng rows. Mỗi logical data block lưu trữ 1 index entry trong bảng prefix index, với độ dài của index entry ko quá 36 bytes. Nội dung index entry sẽ là prefix của các cột được sắp xếp ( sorted keys ) của hàng đầu tiên trong data block . Bởi vì prefix index tương đối nhỏ, nên có thể cache hoàn toàn trên memory, cho phép ta nhanh chóng lấy được vị trí của data block và cải thiện hiệu quả query. 36 byte đầu tiên của row trong data block được sử dụng làm prefix in...

Introduction to Apache Hudi

  Introduction to Apache Hudi Data Lake Integration Hudi có thể đẩy dữ liệu realtime vào các hệ lưu trữ distributed file systems (DFS), như là  HDFS  hoặc cloud stores ( MinIO ) Có thể chứa đc dữ liệu lớn trên file ( parquet, … ), tiết kiệm hơn so với lưu trữ trên các hệ OLAP ( Kudu, Pinot ) Tương thích với nhiều loại query engine nên ta có thể dễ dàng query data từ Hudi table Core Components Tables : Hudi tổ chức data dưới dạng bảng, dễ dàng quản lý và query. Transactions : Hudi hỗ trợ những hoạt động transactional như UPDATE , DELETE ( nếu chỉ dùng Hive thì ko có ) trên từng dòng data. Bảo đảm consistency và durability trong các hành động write data ( Tính chất C và D trong ACID ). Upserts/Deletes : Hudi hỗ trợ update và delete, cho phép bạn thay đổi dòng data hiện tại nhưng ko cần phải xử lý hết toàn bộ dataset ( toàn bộ file ) Advanced Indexes : Hudi hỗ trợ đánh index, giúp cải thiện query performance. Streaming Ingestion Services : Hudi hỗ trợ ing...

Introduction to Apache Doris

Image
  Apache Doris là gì ? Apache Doris là một interactive SQL real-time data warehouse dựa vào kiến trúc MPP ( Massive Parallel Processing ). Hình ảnh dưới đây là những gì Apache Doris có thể đại diện trong data pipeline Technical Kiến trúc của Apache Doris được chia làm 2 loại Frontend (FE): user request processing: xử lý request từ người dùng query parsing and planning: xử lý parsing và xử lý plan của query metadata management: quản lý metadata node management: quản lý node Backend (BE): data storage: lưu trữ dữ liệu query execution: thực thi câu query Storage Engine: Apache Doris có engine lưu trữ dạng columnar ( encode, compress, read data by column ). Hỗ trợ nhiều cấu trúc index: Sorted Compound Key Index, MIN/MAX Indexing, Bloom Filter, Invert Index Hỗ trợ nhiều mô hình dữ liệu ( data model ): Aggregate Key Model, Unique Key Model, Duplicate Key Model Hỗ trợ Materialized Views ( tự động được select và update ) Query Engine: MPP-based query engine...

Một số câu hỏi về 'difference between'

Image
 Một số câu hỏi về 'difference between' ( P1 ) 1. What is the difference between row_number() and rank() in SQL ? Khác nhau ở chỗ xử lý giá trị bằng nhau, đối với: row_number(): thì sẽ đánh số tăng dần ( mặc định bắt đầu từ 1 ) đối với mỗi dòng rank(): thì sẽ đánh số có giá trị bằng nhau ( ví dụ 2 dòng đều là rank 1 ) đối với 2 dòng có giá trị bằng nhau 2. What is the difference between IN and EXISTS and providing me example ? Khác nhau ở chỗ khi filter các giá trị trong 1 list, đối với: in(): thì đó là 1 list biết trước các giá trị exists() thì đó là 1 list chưa biết trước giá trị ( ta sẽ chạy câu này để kiểm trả xem có match giá trị nằm trong vế subquery của exists hay ko ) 3. What is the difference between true column store and row store ? Khác nhau ở chỗ cách lưu trữ, đối với: row store: dữ liệu được nhóm với nhau theo hàng Row 1: [Value1, Value2, Value3] Row 2: [Value4, Value5, Value6] Row 3: [Value7, Value8, Value9] column store: dữ liệu được nhóm với nhau theo ...

Job Scheduling in Apache Spark

Job Scheduling in Apache Spark Job Scheduling Job scheduling có thể nằm ở 2 level: Cluster level hoặc Spark apps level Cluster level: ở đây job sẽ là từng cái Spark apps, từng apps sẽ yêu cầu tài nguyên từ Cluster Manager cho việc xử lý job, khi yêu cầu đc chấp nhận, các tài nguyên này sẽ lock lại và k đc sử dụng bởi các Spark apps khác cho đến khi tài nguyên đc giải phóng Application level: ở đây job sẽ là từng Action đc trigger trong 1 Spark apps. Sẽ có lúc có nhiều job được yêu cầu thực hiện cùng lúc, lúc này Job Scheduling sẽ sắp xếp thực hiện các job này 1 cách phù hợp ( FIFO, FAIR, … ) Job Scheduling at Cluster Level Job Scheduling ở Cluster level có thể hiểu là Resource Availability của cụm. Khi 1 Spark apps được submit và chạy thì nó sẽ có các resource của riêng nó và các resource này sẽ ko share với các apps khác. Nếu có nhiều apps trên cùng 1 cluster cần share các resource với nhau thì chúng ta có 2 cách để phân bổ và quản lý resource: Static Allocation ( phân bổ tĩnh ) Ở các...