2008-09-20 36 views
7

Trong ứng dụng Adobe flex bằng cách sử dụng BlazeDS AMF remoting, stategy tốt nhất để giữ dữ liệu cục bộ mới và đồng bộ với cơ sở dữ liệu phụ trợ là gì?Flex - chiến lược tốt nhất để giữ dữ liệu khách hàng đồng bộ với cơ sở dữ liệu phụ trợ?

Trong ứng dụng web điển hình, các trang web làm mới chế độ xem mỗi lần được tải, vì vậy dữ liệu trong chế độ xem không bao giờ quá cũ.

Trong ứng dụng Flex, có sự tạm thời để tải thêm dữ liệu lên phía trước được chia sẻ trên tab, bảng, v.v. Dữ liệu này thường được làm mới từ chương trình phụ trợ ít thường xuyên hơn, vì vậy có nhiều khả năng hơn cũ - dẫn đến các sự cố khi lưu, v.v.

Vì vậy, cách tốt nhất để khắc phục vấn đề này là gì?

a. xây dựng ứng dụng Flex giống như ứng dụng web - tải lại dữ liệu phụ trợ trên mọi thay đổi chế độ xem có thể có

b. bỏ qua vấn đề và chỉ giải quyết các vấn đề dữ liệu cũ khi chúng xảy ra (có nguy cơ gây phiền nhiễu cho người dùng có nhiều khả năng làm việc với dữ liệu cũ hơn)

c. cái gì khác

Trong trường hợp của tôi, việc giữ kênh dữ liệu mở qua LiveCycle RTMP không phải là một tùy chọn.

Trả lời

0

Trước đây tôi đã chọn "a". Nếu bạn đang sử dụng các đối tượng từ xa, bạn có thể thiết lập một số logic kiểu bộ đệm để giữ chúng đồng bộ hóa ở đầu từ xa.

Sam

0

Bạn không thể sử dụng RTMP qua HTTP (HTTP Polling)? Bằng cách đó bạn vẫn có thể sử dụng RTMP, và mặc dù nó là chậm hơn nhiều so với RTMP thực bạn vẫn có thể cập nhật braodcast theo cách này.

Chúng tôi có một ứng dụng sử dụng RTMP để báo hiệu chèn, cập nhật và xóa bằng cách phát các tin nhắn RTMP chứa cặp Bảng/PrimaryKey, để ứng dụng tự động cập nhật dữ liệu của nó. Chúng tôi thực hiện điều này qua Http bằng RTMP.

1

Nếu bạn không thể sử dụng giao thức nhắn tin trong BlazeDS, thì tôi sẽ phải đồng ý rằng bạn nên thực hiện bỏ phiếu RTMP qua HTTP. Dữ liệu được nén khi sử dụng RTMP trong AMF giúp tăng tốc độ mọi thứ để khách hàng chờ đợi lâu giữa các bản cập nhật. Điều này cũng sẽ cho phép bạn sau đó mở rộng quy mô lên các phương pháp đẩy nếu khách hàng của sản phẩm quyết định thanh toán phần cứng và giấy phép bổ sung.

2

a. Cân nhắc tối ưu hóa các thay đổi ngược lại thông qua proxy có thông báo hoặc chính sách riêng: nó biết nếu dữ liệu nào bị bẩn và sẽ trả về nhanh (a la a 304) nếu không.

b. Thông thường, người dùng nhìn nhiều hơn họ chạm vào. Hãy xem xét một mức độ làm mới để tìm kiếm và một khi chúng bắt đầu và tiếp tục chỉnh sửa.

Nhìn vào BuzzWord: nó khóa trên chỉnh sửa, nhưng cũng tự động lưu và mở thường xuyên.

Cheers

1

Bạn không cần LiveCycle và RTMP để có một cơ chế thông báo, bạn có thể làm điều đó với các kênh từ BlazeDS và sử dụng một streaming/dài chiến lược bầu cử

0

tôi tìm thấy bài viết này về đồng bộ hóa:

http://www.databasejournal.com/features/sybase/article.php/3769756/The-Missing-Sync.htm

Nó không đi sâu vào chi tiết kỹ thuật nhưng bạn có thể đoán những loại mã hóa sẽ thực hiện chiến lược này.

Tôi cũng không có thông báo ưa thích từ máy chủ của mình vì vậy tôi cần các chiến lược đồng bộ hóa.

Ví dụ: tôi có danh sách các công ty trong modelLocator của tôi. Nó không thay đổi thường xuyên, nó không đủ lớn để xem xét phân trang, tôi không muốn tải lại tất cả (removeAll()) trên mỗi hành động của người dùng nhưng tôi không muốn ứng dụng của tôi bị lỗi hoặc UPDATE dữ liệu bị hỏng trong trường hợp nó đã được CẬP NHẬT hoặc XÓA từ một phiên bản khác của ứng dụng.

Điều tôi làm bây giờ là lưu trong SESSION ngày giờ SELECT. Khi tôi trở lại để làm mới dữ liệu tôi chọn nơi last_modified> $ SESSION [ 'lastLoad']

Bằng cách này tôi nhận được chỉ hàng sửa đổi sau khi tôi nạp dữ liệu (phần lớn thời gian 0 hàng).

Rõ ràng bạn cần cập nhật last_modified trên mỗi INSERT và UPDATE.

Để DELETE khó khăn hơn. Như anh chàng chỉ ra trong bài viết của mình: "Làm cách nào chúng tôi có thể gửi hồ sơ không còn tồn tại"

Bạn cần nói flex mục nào cần xóa (nói theo ID) để bạn không thể XÓA DELETE:)

Khi người dùng xóa một công ty bạn thực hiện UPDATE thay thế: deleted = 1 Sau đó, trên các công ty làm mới, cho hàng bị xóa = 1 bạn chỉ cần gửi lại ID để flex để đảm bảo công ty này không trong mô hình nữa.

Cuối cùng nhưng không kém phần quan trọng, bạn cần phải viết hàm để xóa các hàng bị xóa = 1 và last_modified cũ hơn ... 3 ngày hoặc bất cứ điều gì bạn nghĩ phù hợp với nhu cầu của mình.

Điều tốt là nếu người dùng xóa một hàng do nhầm lẫn, nó vẫn còn trong cơ sở dữ liệu và bạn có thể lưu nó khỏi xóa thực trong vòng 3 ngày.

0

Thay vì lưu vào bộ nhớ đệm trên máy khách flex, tại sao không lưu bộ đệm ẩn ở phía máy chủ? Một số lý do,

1) Khi bạn lưu trữ dữ liệu trên máy chủ bên, tập trung của nó và bạn có thể chắc chắn rằng tất cả các khách hàng có cùng trạng thái của dữ liệu

2) Có những lựa chọn tốt hơn nhiều có sẵn trên phía máy chủ cho bộ nhớ đệm khá hơn trên flex. Ngoài ra, bạn có thể có một công việc cron làm mới dữ liệu dựa trên một số tần số nói mỗi 24 giờ.

3) Khi dữ liệu được lưu trữ trên máy chủ và nó không cần phải lấy nó từ db mọi thời gian, giao tiếp với flex sẽ nhanh hơn nhiều

Kính trọng, Tejas

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