2012-06-18 26 views
5

Bằng cách lập trình hơn một chút với căn cứ hỏa lực ngày hôm nay, tôi thấy mình có nhu cầu cho một vài tính năng:Có (hoặc đã được xem xét) bất kỳ thứ gì như cài đặt 'hợp nhất' hoặc 'nhóm' trong Firebase không?

1) Merge thiết lập:

Nói rằng tôi có một căn cứ hỏa lực ref có giá trị {a:1,b:2,c:3}.

Nếu tôi làm điều gì đó như ref.set({a:-1,b:-2}) giá trị mới sẽ (không ngạc nhiên) là {a:-1,b:-2}.

Thay vào đó, hãy tưởng tượng ref.mergeSet({a:-1,b:-2}) điều này sẽ dẫn đến giá trị của ref là {a:-1,b:-2,c:3}.

Bây giờ, tôi nhận ra rằng tôi có thể làm một số thứ như ref.child("a").set(-1)ref.child("b").set(-2) để đạt được kết quả này, nhưng trong ít nhất một số trường hợp, tôi chỉ muốn nhận một cuộc gọi duy nhất để xử lý .on() của tôi.

Điều này phân biệt ý tưởng thứ hai của tôi.

2) hàng loạt thiết lập:

Trong ứng dụng của tôi, tôi muốn một cách để buộc một số bất kỳ các cuộc gọi đến .set để chỉ dẫn đến một cuộc gọi đến .on trong các khách hàng khác. Một cái gì đó như:

ref.startBatch() 
ref.child("a").set(1) 
ref.child("b").set(2) 
.... 
ref.endBatch() 

Trong chế độ hàng loạt, .set sẽ không dẫn đến một cuộc gọi đến .on, thay vào đó, số lượng tối thiểu của các cuộc gọi đến .on sẽ tất cả các kết quả từ gọi .endBatch.


Tôi dễ dàng thừa nhận rằng những ý tưởng này khá mới mẻ và tôi sẽ không ngạc nhiên nếu chúng xung đột với các tính năng kiến ​​trúc hiện có của Firebase, nhưng tôi nghĩ tôi vẫn chia sẻ chúng. Tôi thấy rằng tôi phải dành nhiều thời gian hơn để đảm bảo sự nhất quán giữa các khách hàng khi sử dụng Firebase so với dự kiến.

Xin cảm ơn và tiếp tục công việc tuyệt vời.

Trả lời

6

UPDATE: Chúng tôi đã thêm một phương pháp mới update() cho khách hàng web căn cứ hỏa lực và hỗ trợ PATCH đến REST API, cho phép bạn để nguyên tử sửa đổi nhiều anh chị em tại một địa điểm cụ thể, trong khi rời khỏi anh chị em khác chưa sửa đổi. Đây là những gì bạn mô tả là "mergeSet" và có thể được sử dụng như sau:

ref.update({a: -1, b: -2}); 

sẽ cập nhật 'a' và 'b', nhưng để 'c' chưa sửa đổi.


OLD ĐÁP

Cảm ơn các yêu cầu tính năng chi tiết! Chúng tôi muốn nghe nhiều hơn về trường hợp sử dụng của bạn và cách những nguyên thủy này sẽ giúp bạn. Nếu bạn sẵn sàng chia sẻ thêm chi tiết, hãy gửi email đến [email protected] và chúng tôi có thể tìm hiểu về kịch bản của bạn.

Để trả lời câu hỏi của bạn, lý do chính chúng tôi không có các tính năng này có liên quan đến kiến ​​trúc của chúng tôi và hiệu suất/tính nhất quán đảm bảo rằng chúng tôi đang cố gắng duy trì. Không đi quá sâu, nhưng nếu bạn tưởng tượng rằng dữ liệu Firebase của bạn được trải rộng trên nhiều máy chủ, chúng tôi sẽ có sự đảm bảo mạnh hơn (nguyên tử, thứ tự, v.v.) khi sửa đổi dữ liệu gần giống cây hơn khi sửa đổi dữ liệu xa xa. Vì vậy, bằng cách giới hạn những đảm bảo này cho dữ liệu mà bạn có thể thay thế bằng một lệnh set() duy nhất, chúng tôi sẽ đẩy bạn theo hướng sẽ hoạt động tốt với kiến ​​trúc Firebase.

Trong một số trường hợp, bạn có thể nhận được gần như những gì bạn muốn bằng cách tổ chức lại cây của bạn. Ví dụ, nếu bạn biết rằng bạn luôn muốn đặt 'a' và 'b' lại với nhau, bạn có thể đặt chúng dưới tên cha mẹ 'ab' chung và làm ref.child('ab').set({a:-1, b:-2});, điều này sẽ không ảnh hưởng đến trẻ 'c'.

Như tôi đã nói, chúng tôi muốn nghe thêm về kịch bản của bạn. Chúng tôi đang trong giai đoạn thử nghiệm để chúng tôi có thể học hỏi từ các nhà phát triển về cách họ đang sử dụng API và nơi nó đang giảm xuống! [email protected] :-)

Các vấn đề liên quan