上星期那個客戶擴充開分店一文提到的客戶聯絡我,要求我發展〔分散式伺機器系統〕.
現版本是單一伺服器(中央伺服器),所有clients都是連線到這伺服器.而他要求的,是每間店舖都有自己的伺服器,就算店舖無法上網,offline都可以查看和更改資料,而當online後,所有伺服器的資料必須同步,也要做到real-time看到所有店舖的更新資料.
他說大行都是採用這個架構,為何我不能這樣設計呢?
這個架構,在我開發連鎖零售系統時,客戶也有要求,即是店舖offline也可以做銷售,但當時也評估過如果要開發這類系統,所需要的時間大很多.大行有這個資源 (包括金錢和人才) 去做, 有一個專門的IT部門,而我們只有幾萬的預算和一個Developer,根本沒有足夠的資源發展這個架構.
大家有沒有開發這類系統的經驗呢? 可以分享一下嗎?
Prev Post: 排休系統
Next Post: 新銷售合作計劃
Category Prev Post: 排休系統
Category Next Post: 新銷售合作計劃
相信你客戶所指的是這個︰Database Replication
http://databases.about.com/cs/sqlserver/a/aa041303a.htm
最難處理的會是「同步」這部份,我不了解 memdb 在 client 和 server 版的寫法有否不同,如果所用的指令是一樣的話,把資料庫轉回 local ,再在指定的時間作「同步」吧,在非必要的情況下才即時在 server 上存取資料,以前曾以這方式編寫有關的系統,而另外編寫同步軟件。
如果在指定時間同步就比較容易, 不過也要處理同一data, 在同步前有多個update (conflict)的狀況.
但客戶也想要求, 如果online, 就要real-time, 這個就複雜了, 或者要求5 minutes同步 (或自己設定分鐘), 那我就只需要開發同步module就可以了.
那就可能需要系統做到隨時可以轉換成 server 及 local database,Offline 時便連上 local database,Online 時便會連上 server,理論上應是不難的。
最後便是集中在同步的 module 上,解決 conflict 只得兩個方法,一是用 timestamp 的 log,一是人手處理。
以你估計, 開發這類系統的預算要多少才足夠呢? 例如給你全新設計這個地產系統, 一個人要用多時間時才能完成呢?
其實是沒有必要 5 minutes 同步一次的,如果是 online 的話,直接連接 server database 便是了,如果是 offline 的話 (沒法連接 server 的情況出現),連接 local database 時根本沒有同步可言,但必須記住哪些資料已被修改、新增及刪除等等,在可連接 server 後,進行一次同步把這些資料放回 server 便是了,系統連接 local database 只是非常時期才會出現,而且只是 connection 不同罷了,所以怎樣「同步」才是重點。
我不知這客戶的實際要求,同步到什麼的地步呢,是否所有 client side 的資料也必須互通?能否修改其他 client 的資料?系統中 client side 會否有些功能必須連接 server 才可應用?如必須在 server 取得的 unique key。
如果要真正做到整個 database replication ,我想在 application 層面是幾乎沒有可能的,必須要 database server 配合,單是 table 之間 master-details 的關係也叫人頭痛,而且現時很多 database 已有這功能 (連 mySql 也有這功能了),實在沒有必要自行製作 database replication ,這只是錢的問題。
至於要多少時間,那要看修改多少,當年用了三個月把 single database 的系統寫了個 central 版,各 client 的資料會定時 upload 上 server,也會 download 的一些必要的資料下來,但並不是現在我所見意的方法,用現在的方法應會需要較短的時間。
你可否告訴我database server 層面做database replication做到那些功能呢? 因為沒有用過MySQL, MS SQL Server和Oracle, 這些 database server是否能做到database replication全自動嗎?
不過有些是Application的level才能resolve (包括relation) 到的conflict, database server 又如何解決呢?
我用的是OODB, 很多object都是有關係的, 要在database level做的確有點難.
可以參考這文章,頗詳細的,當然各家的 Database Server 都可能有獨自的做法︰
http://dn.codegear.com/tw/article/27221
可由 Replication in use within Applications 開始看。