2017-01-14 75 views
2

我的Angular/Node應用程序顯示用戶事件的時間線。用戶可以添加,編輯和刪除事件。在AngularJS和數據庫之間保持唯一標識符同步的最佳方法是什麼?

當添加了新的事件,AngularJS添加事件內容作爲JSON成時間軸陣列用於立即顯示給用戶。同時,AngularJS調用一個將事件插入數據庫的Node API,在此過程中,DB生成一個event_id(使用自動增量)。

什麼是保持在事項標識和AngularJS數據庫之間同步的最佳設計(MySQL的)?

思路:

  1. 我可以等待API返回的事項標識,並插入到AngularJS時間表陣列。這裏的問題是,如果用戶在返回event_id之前編輯事件,則應用程序不知道要更新哪個事件。

  2. 當添加一個新事件並在時間軸數組中使用該事件時,我可以在AngularJS端生成一個隨機數(temp_id),並通過API將其發送到數據庫。這裏的一個問題是跟蹤兩種類型的ID:temp_id和event_id

這兩種想法都有缺點。

有人可以提出更好的設計嗎?

+1

如何添加一個透明的屏幕覆蓋,以限制所有的用戶事件,直到從您的Node API接收到響應爲止?這可以與概念1一起實施。 –

+0

這兩種方法都有一個很大的缺點 - 數據不一致。由於某些問題,事件可能不會保存在服務器中,或者用戶甚至可以嘗試更改/刪除未保存在服務器中。所以,你需要像Dhruv Saxena所建議的那樣使用方法,或者在某種事件的UI鎖定中使用1,直到它將在服務器中創建。 –

回答

0

這裏是一個方法,我會考慮:

使用隨機UUID跨客戶作爲主鍵可以保證唯一性。

使用基於會話/用戶的自動增量到您的用戶/客戶端,它不是數據庫中的唯一鍵。

讓Angular爲您的活動提供temporary_idevent_number,然後在您的API響應創建的事件時更新temporary_id

您可能需要在角度應用程序中維護事件的狀態,直到將其保存到數據庫。並可能阻止用戶編輯/更新該事件,直到它被保存並且服務器響應。

+0

Bishoy, 好主意。我在想類似的事情。但是,您認爲使用'UUID'會導致數據庫性能問題,因爲當用戶進行編輯時,將需要使用UUID列的SQL UPDATES。 我將不得不研究上述內容,但我認爲在這種方法中,您可以根據API是否已返回,在使用自動增量生成ID與使用「UUID」進行SQL更新之間進行切換。 也許'UUID'應該用在AngularJS端並且在數據庫端自動增量。 – bscalable

+0

無法談論數據庫性能,因爲它受到您的方案和查詢託管基礎架構中的許多其他因素的影響。但是我鼓勵你通過概念驗證和性能測試來證明它 – Bishoy

相關問題