Thực tiễn tốt nhất để phát triển cơ sở dữ liệu thời gian thực Firebase

News Rush đã sử dụng Firebase được 4 tháng rồi và mặc dù có những thứ chúng tôi muốn thấy được cải thiện (bạn có thể đặt tên cho một sản phẩm hoàn hảo của Cameron không?), Nó đã là một bổ sung có giá trị cho yêu cầu đồng bộ hóa dữ liệu di động của chúng tôi.

Trên đường đi, chúng tôi đã học được một số bài học về cách sử dụng nền tảng tốt nhất để đáp ứng nhu cầu của chúng tôi. Firebase là một cơ sở dữ liệu định hướng tài liệu / NoQuery và do đó chia sẻ nhiều đặc điểm của các nền tảng đó, nhưng cũng có một số đặc điểm riêng để tìm hiểu. Đây là một trò chơi trí tuệ nhanh chóng về những gì chúng tôi đã khám phá trên đường đi.

RTFM!

Tài liệu SDK thường rất tệ, vì vậy nhiều người trong chúng ta có xu hướng lướt qua những điểm cao và quay lại sau (hoặc không bao giờ).

Điều ngược lại là đúng ở đây. Các Hướng dẫn và Mẫu rất dễ theo dõi, và các tài liệu Tham khảo đều ngắn gọn và rõ ràng. Hầu như mỗi khi nhóm của chúng tôi có một câu hỏi hoặc vấn đề, chúng tôi đã tìm thấy giải pháp trong một cái gì đó chúng tôi đã bỏ lỡ trong các tài liệu. Cuối cùng chúng tôi ngồi xuống và đọc từng từ một cách thẳng thắn, và đó là 3 giờ chi tiêu tốt.

Ngoài ra còn có một blog là một kho báu để tìm giải pháp cho các vấn đề trong thế giới thực. Dưới đây là một số bài đăng mà chúng tôi thấy quan trọng nhất trong News Rush:

  • Bảo mật nhóm trong cơ sở dữ liệu Firebase
  • Các truy vấn, Phần 1: Các truy vấn SQL phổ biến được chuyển đổi cho Firebase
  • Thực tiễn tốt nhất: Mảng trong Firebase

Hệ quả: Không có Schema, Schema-less không có nghĩa là không có não!

Một quan niệm sai lầm phổ biến là cơ sở dữ liệu định hướng tài liệu tạo ra kế hoạch trước về cách dữ liệu sẽ được cấu trúc ít quan trọng hơn. Đây là một huyền thoại. Nếu bất cứ điều gì, chúng tôi đã tìm thấy điều ngược lại: họ yêu cầu nhiều hơn.

Không có gì bất thường khi nói kế hoạch tốt có thể giúp giảm hiệu suất cao nhất trong bất kỳ thành phần phần mềm nào. Nhưng trong cơ sở dữ liệu SQL, nó thường đơn giản để sửa các lỗi lập kế hoạch bằng cách chỉ tham gia nhiều bảng hơn, thực hiện các truy vấn phụ hoặc thực hiện cập nhật dữ liệu hàng loạt. Vì Firebase không có các khái niệm này, hãy dành thời gian để ngồi xuống và thực sự mô hình hóa dữ liệu và các mẫu truy cập của bạn trước thời hạn. Bạn sẽ vui vì bạn đã làm.

Và RTFM!

Hỗ trợ là khó hiểu

Có một số tùy chọn hỗ trợ, nhưng cố gắng sử dụng sai trong một tình huống nhất định có thể gây khó chịu. Kinh nghiệm của chúng tôi đã được:

  • Slack: Tự lực theo định hướng cộng đồng và động não không phù hợp với các địa điểm khác. Không phù hợp với một cái gì đó là xuống.
  • Hình thức hỗ trợ: Địa điểm hỗ trợ chính thức của người Viking. Báo cáo một cái gì đó là hạ xuống ở đây. Các yêu cầu tính năng có khả năng nhận được một hộp đóng hộp mà chúng tôi sẽ xem xét, nhưng không có lời hứa nào đáp ứng.
  • Google Groups: Sự tham gia tích cực của nhóm nòng cốt với những cảnh báo thông thường về thời gian quay vòng trong các hệ thống thư hướng theo nhóm. Nơi tốt nhất cho các cuộc thảo luận kỹ thuật cao về nội bộ ứng dụng và các vấn đề kỳ quặc của người Hồi giáo.
  • StackOverflow: Thời gian phản hồi chậm / không thể đoán trước nhưng là nơi tốt nhất để sao lưu tài liệu tham khảo. Nếu bạn đã đọc một câu hỏi và trả lời trên StackOverflow, bạn cũng biết loại câu hỏi mà tốt nhất để gửi ở đó.

Tham khảo và phục hồi đơn giản là giá rẻ

Trong Firebase, một ref ref của người Viking giống như một con trỏ tới dữ liệu. Theo bản năng, nó muốn lưu trữ bộ nhớ cache hoặc quản lý chúng, nhưng trong các thư viện máy khách Firebase hiện tại, bạn không bao giờ nên làm điều này. Họ thực sự chỉ là các trình bao bọc xung quanh các tham chiếu URL tới các đối tượng dữ liệu và các cuộc gọi lại sự kiện mà họ cung cấp quyền truy cập chỉ có thể có một người nghe tại một thời điểm. Nếu bạn cần tham chiếu một đối tượng từ hai nơi khác nhau, hãy lấy hai ref cho nó. Nó không có giá trị chi phí nhiều hơn để làm điều này.

Một quy tắc tương tự áp dụng cho truy xuất dữ liệu. Những người đến từ cơ sở dữ liệu SQL đã quen với việc cố gắng truy xuất các đối tượng lớn hơn trong càng ít truy vấn càng tốt để loại bỏ thời gian khứ hồi và chi phí truy vấn. Khi làm phẳng các cấu trúc dữ liệu, nó đã cố gắng sao chép dữ liệu tóm tắt của Nhật Bản vào nhiều vị trí để cho phép một lần truy xuất để có được mọi thứ cần thiết.

Trong Firebase, đây gần như là quyết định sai lầm. Đối với một điều, các truy xuất khóa / dựa trên ref đơn giản được tối ưu hóa rất nhiều và Firebase cung cấp quy mô ngang lớn cho chúng. Trong thử nghiệm hiệu suất của chúng tôi tại News Rush, chúng tôi cũng thấy rằng Firebase làm tốt hơn nhiều với nhiều vật thể nhỏ hơn. Ngay cả việc loại bỏ một vài trường không cần thiết cũng có thể tăng hiệu suất có thể đo được.

Cũng giống như với các mẫu được tối ưu hóa của Redis, cho các cấu trúc như băm và bộ, khả năng mở rộng ngang lớn của Firebase, là một trong những tính năng chính của nó. Nó không nên chỉ là một thứ tốt đẹp để có. Nó nên được tận dụng như một công cụ trong thiết kế ứng dụng của bạn.

Tránh mảng

Tài liệu Firebase đã bao gồm chủ đề này. Tất cả đều đúng. Tránh chúng.

Không có ngày

Firebase không có loại đối tượng ngày và không cho phép sắp xếp giảm dần. Chúng tôi vừa viết một hàm helper Cập nhật hàm lấy các đối tượng gốc với các trường Date và chuyển đổi chúng thành các giá trị mili giây kể từ epoch và cũng thêm các biến thể số âm tương ứng của các giá trị đó. Sắp xếp tăng dần theo giá trị thời gian số âm cung cấp thứ tự giảm dần mong muốn.

Một kích thước không phù hợp với tất cả

Có vẻ như đó là một ý tưởng tốt vào thời điểm đó

Tận dụng điểm mạnh của Firebase. Don Hãy cố gắng làm cho nó làm mọi công việc bạn có. Dưới đây là một số điều mà Firebase không phải là:

  • Một công cụ tìm kiếm. Nó có một vài thao tác cơ bản như khớp tiền tố, nhưng đó là nó. Sử dụng ELK, Algolia, v.v. nếu bạn cần tìm kiếm toàn năng.
  • Một ngăn xếp API. Các chức năng đám mây cho Firebase có vẻ rất hứa hẹn, nhưng vẫn ở bản Beta. Nếu ứng dụng của bạn là bất kỳ thứ gì ngoài danh sách việc cần làm, hãy lập kế hoạch về cách bạn sẽ thực hiện mã phía máy chủ / tin cậy.
  • Một công cụ báo cáo. Bạn vẫn có thể muốn tận dụng cơ sở dữ liệu quan hệ khi bạn cần cắt / xúc xắc / bộ lọc / đột biến / munge / vv dữ liệu của bạn.
  • Tự lưu trữ hoặc hoàn toàn có thể sử dụng ngoại tuyến. Chức năng ngoại tuyến được cung cấp thông qua đồng bộ hóa / kiên trì, nhưng đám mây Firebase phải được tham gia ngay từ đầu.

Đặt so với cập nhật

Có một sự khác biệt lớn giữa các hoạt động SET và UPDATE. Nó ảnh hưởng đến những gì xảy ra nếu một khóa không tồn tại, nhất là các khóa bên trong các đối tượng phức tạp. Hãy chú ý đến nó!

FirebaseUI thật tuyệt vời!

Ồ tôi nên đề cập, có các dự án đồng hành FirebaseUI cho rất nhiều nền tảng. Sử dụng chúng. Chúng rất hữu ích cho những việc như thiết lập chế độ xem bảng để hiển thị danh sách các đối tượng trong bộ sưu tập Firebase.

Thư viện này cung cấp các lớp FUICollectionViewDataSource và FUITableViewDataSource (và tương đương của chúng trên Android) để bắt đầu trên nền tảng di động chỉ bằng một vài dòng mã. Khởi đầu chạy đó rất tuyệt khi chúng tôi ban đầu đánh giá Firebase. Chúng tôi đã có thể đưa ra một bằng chứng về khái niệm trong một vài giờ với rất ít việc học liên quan so với các lựa chọn khác trên bàn.

Khi bạn đã sẵn sàng cho sự tinh tế và kiểm soát nhiều hơn, FirebaseUI vẫn hữu ích vì nó cũng cung cấp các lớp thu thập dữ liệu cấp thấp hơn FUIArray và FUIIndexArray cho phép bạn lái những thứ như tiêu đề tab và các màn hình lẻ khác.

Tôi có bỏ lỡ điều gì không? Chia sẻ của riêng bạn!