2013-07-25 27 views
14

Chúng tôi cần giữ cho dữ liệu Firebase đồng bộ hóa với databases khác cho full-text search (trong ElasticSearch) và các loại truy vấn khác Firebase không dễ dàng hỗ trợ.Cách giữ cho Firebase đồng bộ với cơ sở dữ liệu khác

Điều này cần càng gần với thời gian thực càng tốt, chúng tôi không thể xuất một bãi chứa hàng đêm của Firebase JSON hoặc bất kỳ thứ gì tương tự, ngoài thực tế là điều này sẽ trở nên khá lớn.

suy nghĩ ban đầu của tôi là chạy một khách hàng Node.js mà nghe child_changed, child_added, child_removed vv ... sự kiện của tất cả các danh sách chính, nhưng điều này có thể nhận được một chút unweildy và nó sẽ là một cách đáng tin cậy đồng bộ nếu khách hàng kết nối lại sau một khoảng thời gian?

Suy nghĩ tiếp theo của tôi là duy trì danh sách các sự kiện "đã thay đổi mục" và ghi vào mỗi lần một mục được tạo/cập nhật, tương tự như ví dụ Firebase work queue. Hàng đợi có thể chứa đường dẫn đầy đủ đến dữ liệu đã thay đổi và nhân viên chỉ tiêu thụ dữ liệu đó và cập nhật cơ sở dữ liệu cục bộ tương ứng.

Vấn đề ở đây là mỗi bit mã làm cho các bản cập nhật phải nhớ ghi vào hàng đợi này nếu không hai hệ thống sẽ không đồng bộ. Một số mã proxy không nên quá khó để viết mặc dù.

Có ai khác đã làm bất cứ điều gì tương tự với bất kỳ thành công nào không?

+0

Tôi nghĩ ý tưởng proxy của bạn có ý nghĩa nhất. Chúng tôi chắc chắn đã thấy các trường hợp mà mọi người đã chạy các tiến trình node.js lưu trữ dấu thời gian của lần cuối cùng họ ghi dữ liệu. Nếu quá trình này gặp sự cố, bạn có thể thực hiện nhập ban đầu bằng cách xem dấu thời gian cuối cùng bạn đã viết. – Anant

+0

@rlivsey Bạn đã nghĩ ra giải pháp chưa? Tôi cần phải giải quyết vấn đề tương tự và tôi đã suy nghĩ về việc sử dụng Tìm kiếm Đàn hồi. Mọi thông tin về trải nghiệm của bạn sẽ được đánh giá cao. – Tim

+1

Chúng tôi đã giải quyết vấn đề này, nhưng trong trường hợp của chúng tôi, thiết lập là khác nhau - chúng tôi sống hạnh phúc với hai cơ sở dữ liệu, mỗi cơ sở cho một mục đích khác nhau. Chúng tôi có MongoDB (* cửa hàng có thẩm quyền *) và Firebase (* cửa hàng thời gian thực *), ** không ** giống nhau, mỗi lưu giữ dữ liệu cần thiết. Không phải tất cả dữ liệu thời gian thực trong Firebase đều phải được ghi vào MongoDB. và một cách khác xung quanh - rất nhiều dữ liệu phi thời gian thực không có trên Mongo của chúng tôi. Chỉ một đoạn ** của dữ liệu được đồng bộ hóa: client -> nodejs -> Mongo + Firebase. Vì vậy, tôi đoán câu hỏi là - bạn có thực sự cần ** tất cả ** dữ liệu được đồng bộ hóa không? – oori

Trả lời

5

Đối với truy vấn tìm kiếm, bạn có thể tích hợp trực tiếp với ElasticSearch; không cần phải đồng bộ với cơ sở dữ liệu thứ cấp. Firebase có một số blog post about integrating và một lib, Flashlight, để làm điều này nhanh chóng và không đau.

+0

Trong khi điều này hữu ích, tôi quyết định viết một đoạn mã nhỏ để đồng bộ hóa Firebase với Mongo. Bạn có thể tìm thêm thông tin trong [bài đăng này] (https://medium.com/@ariklevliber/querying-firebase-through-mongo-412a824ca4dd#.bp4vz7rkx) – Leo

0

Một tùy chọn khác là sử dụng plugin logstash-input-firebase Logstash để nghe các thay đổi trong cơ sở dữ liệu thời gian thực Firebase của bạn và chuyển tiếp dữ liệu trong thời gian thực tới Elasticsearch bằng cách sử dụng đầu ra elasticsearch.

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