#212 - Tối ưu hóa query trong Postgres
Trong số này, mời bạn đọc tìm hiểu về:
10 nguyên tắc sử dụng Apache Airflow để tránh trình trạng scheduling và job logic bị phụ thuộc lẫn nhau;
Cách tiến hành thay đổi quy mô lớn bằng kĩ thuật branch by abstraction;
Nhược điểm của Postgres Planner và cách Orca tự động tối ưu hoá query trong cơ sở dữ liệu phân tán;
Lời giải đề bài tuần trước: Smallest string with swaps;
Đề bài tuần này: Trapping rain water.
Những bài viết hay
Apache Airflow in 2022: 10 Rules to Make It Work
Airflow, một nền tảng nguồn mở được sử dụng rất rộng rãi, cho phép bạn xây dựng và chạy các workflows. Các workflows được biểu diễn dưới dạng DAG (Directed Acyclic Graph) và chứa các phần công việc riêng lẻ được gọi là Task. Ở chế độ mặc định, Airflow rất dễ dàng sử dụng với không nhiều các quy tắc nghiêm ngặt đối với người dùng. Chính điều này đã gây ra vấn đề lớn với Airflow, đó là sự phụ thuộc lẫn nhau (coupling) giữa scheduling và job logic.
Trông bài viết, tác giả đưa ra 10 quy tắc chúng ta nên tuân theo khi sử dụng Airflow:
- Airflow là một orchestration framework, không phải execution framework.
- Hạn chế sử dụng PythonOperator cho job của bạn.
- Kiểm tra các Operators có sẵn trước khi tạo ra một Operator mới.
- Không nên cài đặt các custom dependency cho Airflow deployment.
- Airflow không phải là một giải pháp cho data lineage.
- Airflow không phải là một giải pháp cho data storage.
- Không nên gán các secrets cho Airflow variables hay connections.
- Sử dụng Airflow cho mục dịch scheduling job, tạo một Git repo khác cho job logic hơn là đặt trong Airflow DAG.
- Không nên deploy các components (scheduler, webserver, workers) các Airflow với nhau. Chúng nên chạy riêng biệt và độc lập.
- Cân nhắc sử dụng một executor hợp lý (LocalExecutor, CeleryExecutor, KubernetesExecutor).
(by MS)
Make Large Scale Changes Incrementally with Branch By Abstraction - Continuous Delivery
Việc sử dụng triệt để các branch trên hệ thống kiểm soát phiên bản (version control system) không còn xa lạ với các lập trình viên, đặc biệt là với feature branch pattern phổ biến hiện nay. Tuy nhiên, theo đúng định nghĩa về Continuous Delivery thì bạn không thể vừa thực hiện tích hợp liên tục (continuous integration) vừa sử dụng branch - vì nếu code của bạn ở yên trong 1 branch tách biệt, nghĩa là nó chưa được tích hợp.
Một trường hợp phổ biến và có vẻ hợp lí để sử dụng branch là khi tiến hành thay đổi quy mô lớn. Tuy nhiên, có một giải pháp thay thế branch, đó là kĩ thuật branch by abstraction. Đây là một pattern để thực hiện thay đổi quy mô lớn cho ứng dụng một cách dần dần trên branch chính. Pattern này được thực thi như sau:
Tạo một lớp trừu tượng (abstraction) quanh phần code mà bạn cần thay đổi.
Refactor phần còn lại của hệ thống để sử dụng lớp trừu tượng đó.
Tạo các class hoặc code mới mà bạn cần thay đổi. Khiến lớp trừu tượng gọi (delegate) tới các class cũ hoặc mới của bạn theo ý muốn.
Bỏ phần code cũ.
Lặp lại 2 bước trên, trong lúc này bạn đã có thể release hệ thống nếu muốn.
Khi toàn bộ code cũ đã hoàn toàn được thay thế bởi code mới, bạn có thể bỏ đi lớp trừu tượng nếu thích.
Bài viết có kèm theo hai trường hợp thực tế, một số biến thể của pattern branch by abstraction, và so sánh với các pattern khác như feature toggle, strangler application, refactoring để giúp người đọc hiểu thêm một cách toàn diện.
(by nghialuu)
Góc Database
Trong các hệ thống cơ sở dữ liệu quan hệ (relational database) truyền thống, ta có thể xem Storage Engine và Query Engine là "linh hồn" của cơ sở dữ liệu.
Khi người dùng submit một query (câu lệnh truy vấn), query đó sẽ ứng với rất nhiều phiên bản Query Execution Plan. Một query phức tạp có khi sẽ sinh ra vài trăm nghìn biến thể khác nhau của Execution Plan. Việc sinh ra các biến thể phù hợp đã khó, làm sao để chọn plan trong một thời gian ngắn lại còn khó hơn. Chính vì vậy, việc cải tiến bộ sinh Execution Plan cũng như tự động tối ưu hoá các query là một trong các bài toán mới của ngành Database hiện đại.
Góc Data kỳ này mời các bạn cùng tìm hiểu về nhược điểm của Postgres Planner cũng như những cải tiến trong Orca, thành phần chịu trách nhiệm tối ưu hoá query được sử dụng trong Greenplum, một cơ sở dữ liệu phân tán xây dựng trên nền tảng PostgreSQL.
(by n^4)
Góc Lập Trình
Đề tuần này: Trapping Rain Water
Lời giải đề bài tuần trước:
Đề bài: Smallest String With Swaps
Lời giải:
Đề bài đưa ra một chuỗi ký tự cố định, và một mảng bao gồm các cặp số tự nhiên. Mỗi cặp số tự nhiên biểu thị cho vị trí của 2 ký tự có thể đổi chỗ cho nhau. Đề bài yêu cầu tìm chuỗi ký tự nhỏ nhất sau khi thực hiện tùy ý các bước đổi chỗ.
Ta thấy rằng khi có 2 cặp vị trí liên kết với nhau (tức là có 1 vị trí trùng nhau), ta có thể tùy ý đổi chỗ tất cả các kí tự trong 2 cặp vị trí đó.
Ví dụ: (1,2), (1,5) --> có thể tùy ý đổi chỗ vị trí của 3 ký thứ 1, 2 và 5.
Gọi nhóm các ký tự như trên là một nhóm liên kết, có thể nhận ra hướng giải cho bài toán này là tìm tất cả các nhóm liên kết, sau đó sắp xếp lại các kí tự trong từng nhóm theo thứ tự tăng dần.
Để tìm các nhóm ký tự liên kết với nhau, ta có thể sử dụng Depth First Search, Breadth First Search hoặc Union-Find. Mời các bạn tham khảo một lời giải dựa trên Union-Find tại link dưới đây.
(by ndaadn)
Có thể bạn chưa biết
Được xuất bản vào tháng 3 năm 1990, cuốn sách Introduction to Algorithms đã trở thành một trong những cuốn sách khoa học máy tính được trích dẫn nhiều nhất với hơn 10 nghìn lượt trích dẫn trên citerseerx, đồng thời cũng bán được hơn 1 triệu bản trên toàn thế giới. Ấn bản thứ 4 sẽ ra mắt vào tháng 4 năm nay với nhiều cập nhật mới.
(by lpv)
Code & Tools
Góc Sponsors
Fossil Việt Nam, tiền thân là Misfit, giữ vị thế là Trung tâm Nghiên cứu và Phát triển Công nghệ Thiết bị đeo thông minh trực thuộc Fossil Group. Từ những ngày đầu thành lập, đội ngũ kỹ sư Việt đã thiết kế và xây dựng hệ sinh thái thiết bị đeo thông minh phục vụ cuộc sống của hàng triệu người toàn cầu. Chúng tôi tự hào là những nhà đổi mới luôn bứt phá giới hạn của công nghệ và thời trang, tập trung phát triển 3 nhóm sản phẩm chủ lực: thiết bị, ứng dụng, và dữ liệu trên đám mây.
ĐIỀU FOSSIL TỰ TIN MANG ĐẾN CHO BẠN?
Tham gia nghiên cứu và phát triển Thiết bị đeo thông minh hàng triệu người dùng trên toàn thế giới. Với Fossil, mỗi việc bạn làm đều có thể mang lại thay đổi cho cuộc sống của rất nhiều người.
Lộ trình nghề nghiệp đa dạng, bất kể bạn muốn quản lý đội ngũ hay tập trung phát triển chuyên môn kỹ thuật.
Cơ hội làm việc và học hỏi từ các kỹ sư Google, Qualcomm, Citizen, v.v.
Bảo hiểm sức khỏe cao cấp, thu nhập và phúc lợi cạnh tranh mang đến trải nghiệm làm việc toàn diện nhất.
Môi trường làm việc linh hoạt để bạn thỏa sức học hỏi, phát triển và tạo ra tác động tích cực!
Fossil Việt Nam đang mở ra cơ hội với hàng loạt vị trí hấp dẫn
(Cloud Engineer, Android Engineer, Software Architect), mời bạn tham khảo chi tiết công việc tại ĐÂY.
Kết nối với Fossil Việt Nam
Email tuyển dụng: people@fossil.com
Linkedin: https://www.linkedin.com/company/fossilvietnamcareers
Quotes
“The most disastrous thing that you can ever learn is your first programming language.”
― Alan Kay
Bạn đánh giá nội dung số newsletter này thế nào?
(1 = Rất tệ / 5 = Rất tốt)
Đánh giá của các bạn sẽ giúp chúng tôi liên tục cải thiện nội dung newsletter!