Point-Free đã phát hành SQLiteData , một thư viện Swift mới mang đến khả năng đồng bộ hóa CloudKit cho cơ sở dữ liệu SQLite đồng thời định vị mình như một giải pháp thay thế nhanh hơn cho SwiftData của Apple . Thư viện này đã tạo ra nhiều cuộc thảo luận sôi nổi trong cộng đồng nhà phát triển, đặc biệt xoay quanh các tuyên bố về hiệu suất và quyết định kiến trúc.
Kết Quả Benchmark Hiệu Suất Cho Thấy Kết Quả Trái Chiều
SQLiteData tuyên bố có hiệu suất vượt trội so với các giải pháp hiện có, nhưng cộng đồng đã đặt ra câu hỏi về những benchmark này. Thư viện sử dụng Swift macros để tạo ra các giao diện hiệu suất cao tại thời điểm build, tránh phương pháp Codable chậm hơn mà nhiều thư viện SQLite dựa vào. Tuy nhiên, các nhà phát triển đã chỉ ra một nghịch lý thú vị: SQLiteData thực sự sử dụng GRDB bên dưới, nhưng lại tuyên bố vượt trội hơn nó trong các benchmark.
Sự khác biệt về hiệu suất xuất phát từ các phương pháp triển khai. Trong khi GRDB khuyến khích sử dụng Codable để thuận tiện, điều này truy cập các giá trị cơ sở dữ liệu theo tên cột thông qua nhiều lớp, SQLiteData sử dụng thư viện StructuredQueries của mình để truy cập các giá trị theo vị trí. Lựa chọn kiến trúc này mang lại hiệu suất nhanh hơn có thể đo lường được, với các benchmark cho thấy SQLiteData hoàn thành các tác vụ trong 8.5 giây so với phương pháp Codable của GRDB là 53.3 giây.
Lưu ý: GRDB là một bộ công cụ SQLite phổ biến cho các ứng dụng Swift . Codable là giao thức của Apple để mã hóa và giải mã dữ liệu, mặc dù nó có thể chậm hơn các phương pháp truy cập cơ sở dữ liệu trực tiếp.
So sánh Benchmark Hiệu suất (Thời gian tính bằng giây)
Thư viện | Phương pháp | Thời gian |
---|---|---|
SQLite (raw) | Được tạo bởi Enlighter | 7.183 |
Lighter | Tạo tĩnh | 8.059 |
SQLiteData | Tạo bằng Macro | 8.511 |
GRDB | Giải mã thủ công | 18.819 |
SQLite.swift | Giải mã thủ công | 27.994 |
SQLite.swift | Codable | 43.261 |
GRDB | Codable | 53.326 |
Tích Hợp CloudKit Lấp Đầy Khoảng Trống Thị Trường
Tính năng hấp dẫn nhất đối với nhiều nhà phát triển dường như là đồng bộ hóa CloudKit , điều này đã vắng mặt đáng kể trong hệ sinh thái SQLite . Các thành viên cộng đồng nhấn mạnh rằng khả năng này không tồn tại dưới bất kỳ hình thức được duy trì nào trước SQLiteData , với các nỗ lực trước đây như Harmony và SQLiteChangesetSync đều mang tính thử nghiệm hoặc đã bị bỏ rơi.
Tích hợp này giải quyết nhu cầu thực sự của các nhà phát triển muốn giữ dữ liệu người dùng trong hệ sinh thái của Apple thay vì quản lý máy chủ đồng bộ của riêng họ. Thư viện xử lý giải quyết xung đột bằng cách sử dụng chiến lược ghi cuối cùng thắng được áp dụng một cách chi tiết ở mức thuộc tính, điều mà các nhà phát triển lưu ý hoạt động tốt cho hầu hết các ứng dụng không cộng tác.
Mối Quan Ngại Về Việc Áp Dụng Của Nhà Phát Triển Và Các Giải Pháp Thay Thế
Cộng đồng cho thấy phản ứng trái chiều đối với việc áp dụng một thư viện bên thứ ba khác, đặc biệt là do lịch sử của các thư viện iOS phổ biến cuối cùng trở nên lỗi thời. Một số nhà phát triển đặt câu hỏi liệu có đáng để học một công cụ mới khi SwiftData của chính Apple có thể cuối cùng sẽ trưởng thành để đáp ứng những nhu cầu tương tự.
Tuy nhiên, những người ủng hộ đã chỉ ra những hạn chế thực tế với các sản phẩm hiện tại của Apple . SwiftData thiếu các tính năng chính như hỗ trợ tác vụ nền, có vấn đề về hiệu suất với các tập dữ liệu lớn, và không hoạt động tốt bên ngoài các view SwiftUI . Đối với các nhà phát triển đã sử dụng SQLite thông qua GRDB , SQLiteData cung cấp một con đường để thêm đồng bộ CloudKit mà không cần thay đổi kiến trúc lớn.
Không có điều đó, các lựa chọn thay thế duy nhất của tôi là SwiftData hoặc CoreData , với những nhược điểm nghiêm trọng.
Khả năng tương thích ngược với iOS 13 của thư viện cũng thu hút các nhà phát triển chưa thể yêu cầu các phiên bản iOS mới nhất cho ứng dụng của họ.
So sánh các tính năng chính
Ưu điểm của SQLiteData:
- Đồng bộ hóa và chia sẻ CloudKit
- Tương thích với iOS 13+
- Tối ưu hóa hiệu suất dựa trên Swift macro
- Hỗ trợ truy vấn SQL trực tiếp thông qua sql macro
- Tương thích với tác vụ chạy nền
Hạn chế của SwiftData:
- Chỉ hỗ trợ iOS 17+ (chỉ mục yêu cầu iOS 18+)
- Vấn đề về hiệu suất với bộ dữ liệu lớn
- Giới hạn chỉ sử dụng trong SwiftUI view
- Không hỗ trợ chia sẻ CloudKit
- Phụ thuộc vào chu kỳ cập nhật hàng năm
Kiến Trúc Kỹ Thuật Và Triển Vọng Tương Lai
SQLiteData áp dụng một phương pháp thực dụng bằng cách xây dựng trên những nền tảng đã được chứng minh thay vì phát minh lại mọi thứ. Nó tận dụng GRDB cho các hoạt động SQLite đồng thời thêm các tối ưu hóa hiệu suất và tích hợp CloudKit của riêng mình. Các nhà phát triển đã chỉ ra rằng họ có thể hỗ trợ các adapter SQLite khác trong tương lai, gợi ý một kiến trúc linh hoạt.
Đối với các nhà phát triển tìm kiếm các giải pháp thay thế, cộng đồng đã thảo luận về một số lựa chọn bao gồm sử dụng GRDB thô, Lighter (tạo ra các binding từ schema SQLite ), và chờ đợi các cải tiến SwiftData . Mỗi phương pháp đều có những đánh đổi giữa hiệu suất, tính năng và các cân nhắc bảo trì dài hạn.
Việc phát hành này đại diện cho một bổ sung đáng kể cho hệ sinh thái Swift , đặc biệt là đối với các nhà phát triển cần cả hiệu suất của SQLite và khả năng đồng bộ của CloudKit . Liệu nó có được áp dụng rộng rãi hay không có thể sẽ phụ thuộc vào việc Apple giải quyết các hạn chế hiện tại của SwiftData nhanh như thế nào và liệu cộng đồng phát triển iOS có chấp nhận một lớp trừu tượng khác trên nhu cầu lưu trữ dữ liệu của họ hay không.
Tham khảo: SQLiteData