鍍金池/ 問(wèn)答/PHP  Linux  數(shù)據(jù)庫(kù)  HTML/ 用戶離線時(shí)產(chǎn)生了N多條操作記錄,然后上傳到了云端,請(qǐng)問(wèn)如何把它們合并成數(shù)據(jù)最后的

用戶離線時(shí)產(chǎn)生了N多條操作記錄,然后上傳到了云端,請(qǐng)問(wèn)如何把它們合并成數(shù)據(jù)最后的狀態(tài)?

如題,我們是一款可以本地閱讀圖書(shū)的應(yīng)用。用戶可以針對(duì)一本書(shū)進(jìn)行筆記操作,具體而言,主要講就是“增刪改查”筆記。

我們是支持離線使用的,為了保證數(shù)據(jù)同步,用戶離線使用時(shí)的“每一個(gè)操作”都會(huì)生成一條usageRecord,有點(diǎn)像log吧。
比如用戶離線時(shí),先增加一條筆記,我們會(huì)記錄
{noteId:a-guid-string,operation:add,time:123123123}
然后用戶又更新了一下這條筆記,我們就會(huì)記錄:
{noteId:a-guid-string,operation:update,time:123123123}
最后用戶又刪除了這條筆記,我們就會(huì)記錄:
{noteId:a-guid-string,operation:delete,time:123123123}

當(dāng)用戶聯(lián)網(wǎng)之后,客戶端就會(huì)把上述3條數(shù)據(jù)都傳到服務(wù)器端,讓服務(wù)期存到數(shù)據(jù)庫(kù)。但是存之前,需要先把數(shù)據(jù)整理成最終的樣子,請(qǐng)問(wèn)有什么好的解決方案可以參考嗎?

PS:也可以在客戶端完成數(shù)據(jù)的處理,然后上傳到服務(wù)期端。

回答
編輯回答
久礙你

對(duì)于任意數(shù)據(jù): 不是所有數(shù)據(jù)都一定能合并 ("最終一致")。比如dropbox在有沖突的時(shí)候是直接給你復(fù)制一份,讓你自己解決。

只有文本的時(shí)候相對(duì)好些,但能合并也需要不弱的條件。無(wú)法合并時(shí)讓人類 (你的用戶) 處理可能比較好。

2018年5月27日 23:52
編輯回答
憶往昔

聯(lián)網(wǎng)情況下,這些不是同步處理的么?

現(xiàn)在有個(gè)想法:

離線之后,再聯(lián)網(wǎng)的操作,就相當(dāng)于把之前這段時(shí)間的操作再回放一下,
那么可否把這些請(qǐng)求暫存進(jìn)一個(gè)客戶端的任務(wù)隊(duì)列,聯(lián)網(wǎng)的時(shí)候,再去消費(fèi)這個(gè)隊(duì)列?

2017年3月14日 08:56