30/09/2018, 18:06

Hỏi cách server và client đồng bộ data?

Trong Android, lần đầu vào activity mình sẽ request lên server để get dữ liệu JSON về và hiển thị lên UI.
Khi lần thứ 2 vào lại Activity mình lại tiếp tục request để lấy dữ liệu về, mặc dù dữ liệu vẫn giống lần trước. Nên mình muốn hỏi một số câu như sau và mong được giải đáp.

  1. Có phải mình nên lưu dữ liệu vào local sau lần get data đầu tiên, để các lần sau sử dụng data có sẵn từ local sẽ nhanh hơn ?

  2. Làm sao biết được data trên server đã update để mình biết khi nào thì sử dụng data local, khi nào thì cập nhật data mới nhất từ server về và sử dụng

  3. Ví dụ như dữ liệu trên server được update thêm một ít text. Mình chỉ muốn lấy những dữ liệu mới này thôi thay vì phải download lại toàn bộ dữ liệu của server thì phải thực hiện như thế nào?

Thành Phạm viết 20:16 ngày 30/09/2018

A post was merged into an existing topic: Topic này chứa các post được cho là Off-topic

Nếu muốn đặt gạch hóng, bạn chỉ việc chỉnh tracking(hoặc normal) thành watching

Hnib viết 20:19 ngày 30/09/2018

@laptrinhio @GDGHN_AndroidTeam @Itachi_Citus có thể vào giúp được ko

Lập Trình Sư viết 20:06 ngày 30/09/2018

Sử dụng ETag để kiểm tra data trên server có mới hay ko.

Khi biết là mới, thì request xử lý thêm một parameter mới, để nhận biết data cuối cùng lấy của lần trước là gì.

Itachi Citus viết 20:14 ngày 30/09/2018

Mình không chuyên về bên android lắm nên mình chỉ nói theo cách nghĩ của web service thôi nha, android có thể hỗ trợ riêng một số cơ chế nào đó: Giả sử nó là trang dạng tin tức chẳng hạn

  1. Nếu lưu vào local thì nó sẽ hiển thị dữ liệu đã có cho user trong trường hợp không có internet, hiển thị nhanh hơn… Tuy nhiên khá nhiều phần mềm quyết định không cài đặt tính năng này và không thực sự cần thiết nếu phần mềm không có chế độ offline, gây phức tạp không cần thiết trong khi phát triển.

  2. Bạn có thể lưu thời gian dữ liệu được cập nhật/ id của dữ liệu mới nhất và đối sánh với dữ liệu hiện tại ở điện thoại, nếu có khác biệt thì sẽ cập nhật. Trong trường hợp bạn muốn cập nhật dữ liệu thời gian thực thì có thể sử dụng polling/socket/push notification.

  3. Trong trường hợp tin tức chẳng hạn, thì bạn có id của tin gần nhất hoặc thời gian cập nhật, từ thời gian bạn có thể thực hiện query riêng để lấy dữ liệu mới hơn. Tuy nhiên, chi phí truy vấn web service xét về mặt client khá thấp, 10 -1000kB là tương đối lớn với dữ liệu chỉ text rồi, do đó việc lấy lại toàn bộ dữ liệu cũng không sao đâu, không cần thiết phải tối ưu hóa tới mức chỉ lấy dữ liệu mới.

Nếu bạn nói rõ hơn về cách hoạt động thì nó sẽ chuẩn hơn, mình chỉ nói về dạng ứng dụng “tin tức” như medium, quora, flipboard.

Tam Kid viết 20:21 ngày 30/09/2018

anh ơi em cũng đang có vấn đề như vậy ( anh giúp em với)
Hiện tại em dang làm app android lấy giữ liệu JSON từ Server (thông qua webservice của em tự tạo)
Lần đầu em lấy giữ liệu từ server về thông qua service . Lần sau em mún update dữ liệu mới từ server thôi thì em phải làm sao vậy anh…
Mong anh giúp đỡ…

Itachi Citus viết 20:07 ngày 30/09/2018

Như mình nói ở trên á bạn

Trong trường hợp tin tức chẳng hạn, thì bạn có id của tin gần nhất hoặc thời gian cập nhật, từ thời gian này bạn có thể thực hiện query riêng để lấy dữ liệu mới hơn

Tức là trên csdl của bạn phải lưu thòi gian, hoặc lưu id theo thứ tự tăng dần.

Lấy ví dụ của twitter

timeline api

Twitter tổ chức dữ liệu theo id, id tăng dần, nghĩa là dữ liệu mới hơn sẽ có id lớn hơn. Khi bạn truy vấn dữ liệu - gọi twitter api, nếu bạn thêm trường max_id thì twitter sẽ tìm kiếm dữ liệu mới hơn dữ liệu có id == max_id.

Nếu xây dựng cơ sở dữ liệu kiểu này thì khi truy vấn, bạn chỉ cần thêm đoạn sau vào câu truy vấn

    WHERE ID > MAX_ID AND...
Bài liên quan
0