GIỚI THIỆU GOOGLE FIREBASE – REALTIME DATABASE SYSTEM - Phần 2
Ưu điểm cuản firebase Như bạn có thể thấy, Firebase cung cấp rất nhiều dịch vụ hỗ trợ giúp các lập trình viên xây dựng ứng dụng của mình. Việc tích hợp Firebase vào ứng dụng có thể hạ nỗi lo lắng của các dev xuống ở mức coding, đặc biệt là cho các dev viết các ứng dụng có liên quan tới web. ...
-
Ưu điểm cuản firebase Như bạn có thể thấy, Firebase cung cấp rất nhiều dịch vụ hỗ trợ giúp các lập trình viên xây dựng ứng dụng của mình. Việc tích hợp Firebase vào ứng dụng có thể hạ nỗi lo lắng của các dev xuống ở mức coding, đặc biệt là cho các dev viết các ứng dụng có liên quan tới web. Bước đầu tiên, bạn cần có host để chứa cơ sở dữ liệu -> đã có Firebase Hosting và Storage. Bạn cần viết code PHP để giao tiếp? Có thể không cần cho lắm, vì Firebase Authentication và Realtime Database đã sẵn sàng cho bạn tích hợp và sử dụng “ngay và luôn”. Bạn muốn gửi thông báo tới các thiết bị? Firebase Cloud Messaging là cái bạn cần. Hơn thế nữa, với Test Lab, Crash Reporting, App Indexing thì Firebase sẽ báo cáo cho bạn các vấn đề có thể xảy ra khi ứng dụng của bạn chạy nhiều trên máy thật. Cũng như Remote Config giúp bạn thay đổi các thiết lập trên ứng dụng của người dùng mà không cần thiết phải publish 1 phiên bản mới…
Cá nhân tôi, sau khi sử dụng Firebase, mặc dù chỉ ở mức độ “cho biết”, nhưng đã có thể kết luận là sẽ sử dụng Firebase cho các ứng dụng có liên quan tới web sau này, bởi tôi chỉ xếp nó sau việc tự thiết kế toàn bộ hạ tầng từ A-Z, còn nếu đem so với các nhà cung cấp khác thì không ai có thể vượt qua được “Ngọn lửa” cả. Các nhà cung cấp khác có thể có một vài dịch vụ chất lượng hơn, nhưng nhìn chung, họ không cung cấp số lượng dịch vụ nhiều như vậy.
-
Nhược điểm của firebase Không có gì là hoàn hảo, và Firebase cũng không là ngoại lệ. Điểm yếu duy nhất của “Ngọn lửa” chính là phần Realtime Database, mà đúng hơn chỉ là phần Database. Cơ sở dữ liệu của họ được tổ chức theo kiểu trees, parent-children, không phải là kiểu Table nên những ai đang quen với SQL có thể sẽ gặp khó khăn từ mức đôi chút tới khá nhiều. Sắp tới, sau khi giới thiệu xong các dịch vụ làm nên chiếc bánh (pie) phía trên, tôi sẽ Việt hóa các hướng dẫn của anh David East, một kĩ sư cao cấp trụ cột của Firebase, về việc chuyển đổi từ SQLDatabase sang Firebase Database.
-
Tích hợp Firebase vào trong Project ứng dụng Ở đoạn này, tôi sẽ hướng dẫn các bạn tích hợp Firebase vào trong Project Android, iOS và Web. Để tạo một Firebase project mới, các bạn truy cập vào Firebase Console, đăng nhập với tài khoản Google của mình, và nhấn CREATE NEW PROJECT và tạo project. Sau khi tạo xong, bạn sẽ thấy giao diện trang tương tự như sau:
-
Cấu trúc dữ liệu trên Firebase Cơ sở dữ liệu Firebase không hỗ trợ mảng. Nếu chúng ta cố gắng lưu trữ một mảng, nó thực tế sẽ lưu là một object với các số nguyên là tên của khoá.
[“hello”, “world”]
//Khi firebase lưu trữ thì nó thành
{0: “hello”, 1: “world”} Tuy nhiên để giúp lập trình viên lưu trữ mảng trong cơ sở dữ liệu Firebase, khi dữ liệu được đọc sử dụng “value” từ REST api, nếu dữ liệu giống kiểu mảng, Firebase sẽ cho đầu ra là một mảng. Điều đặc biệt nếu tất cả keys và kiểu sô nguyen, và hơn một nửa của keys từ 0 đến key lớn nhất trong một đối tượng có kiểu khác rỗng, thì Firebase sẽ cho đầu ra là một mảng. // chúng ta gửi dữ liệu ['a', 'b', 'c', 'd', 'e'] // Cở sở dữ liệu Firebase lưu nó là {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'} // ở đây các key là kiểu số và liên tục, //Nếu chúng ta truy vấn dữ liệu, chúng ta sẽ lây dược ['a', 'b', 'c', 'd', 'e'] // Tuy nhiên nếu chúng ta sau đó xoá a, b, và d // Thì dữ liệu đó không còn tuần tự nữa // Chúng ta không lấy được giá trị là một mảng nữa {2: 'c', 4: 'e'} Tại sao không cung cấp đầy đủ việc hỗ trợ kiểu mảng? Với real-time việc chỉnh sửa sẽ đem đến rất nhiều vấn đề vì chỉ số của mảng không phải là tồn tại vĩnh viễn.
Ví dụ: Nếu 3 người dùng cùng cập nhật một mảng trên server. Nếu người dùng A cố gắng để thay đổi giá trị tại key 2, người dùng B cố gắng xoá key 2, và người dùng C cố gắng thay đổi nó vậy điều này sẽ trả lại dữ liệu không đúng. Ví dụ:
//bắt đầu với dữ liệu ['a', 'b', 'c', 'd', 'e'] // A) di chuyển key 2 key 5 // b) xoá key 2 // c) cập nhật key 2 thành foo // Đầu tiên tôi nghĩ kết quả sẽ là ['a', 'b', 'd', 'e'] // Nhưng mà thực tế thì ['a', 'c', 'foo', 'b'] Lưu ý khi lưu trữ mảng:
-Tại một thời điểm chỉ có một client có thể ghi vào mảng.
-Để xoá các key, chúng ta lưu toàn bộ mảng thay vì sử dụng removeValue.
-Chúng ta phải cẩn thận hơn khi cập nhật chỉ số mảng.