能談談在多個銷售點進行數據共想嗎﹖一個總公司﹐n個分公司。共想數據的方案﹖(300分)

  • 主题发起人 主题发起人 22228888
  • 开始时间 开始时间
2

22228888

Unregistered / Unconfirmed
GUEST, unregistred user!
最近﹐與朋友一起談到如何開發一個數據能結合的系統。感到這是一個目前適合中小型系統
的合適決策。但對于目前的網絡不穩定情況﹐能如何有效的來進行數據的結合呢﹖

比如﹕

總公司
|
------------------------------------------------------------------
| | | | |
廣州分公司 東莞分公司 武漢分公司 深圳直銷點 湖洲分廠
|
_________________
| |
長安分銷處 虎門分銷處

這樣﹐大家對此就顯而易見了。而在這樣的架構中﹐廣州﹐東莞﹐深圳都有固定ip﹐武漢用是adsl﹐網絡速度還可以﹐但經常吊線﹐且有時不能上網。但是湖洲是model。極不穩定﹐基本一個星期有兩天不能上網。為了數據的極時更新的安全﹐我們必須排除vpn的做法﹐那樣一天兩天玩玩是沒有問題﹐時間長了就不保險了。

對此﹐我提出這樣的想法﹕每天晚上﹐我們能像瑞星一樣﹐先上傳所有更新數據至總公司﹐再下載最新數據到本地。并且只上傳更新過的。

原因﹕1﹐網絡的不穩定。2﹐數據的安全性。(比喻﹕銷售單價和數量是要保密的)

問題﹕如果按照這表思路﹐那數據的更新如何進行呢﹖下載的數據又如果更新到本地的服務器。

其實這個問題李維的分布式都講得很清楚了﹐我們可以只要delta﹐進行mergechangelog就行了。但是大家對此有沒有更好的方法呢﹖


目前﹐這只是一個進銷存財的問題﹐我采用的是三層結構﹕
tremotedatamodule+socketconnect,在程序的編寫方面我沒有想到更好的方法來實現上面的問題。如果連遠程sql,那就是客戶端再小﹐我想用戶也難以接受網絡的慢﹗
 
个人经验。。。。
1)注册一个有MSSQL的网络服务器(Internet Server)
2)用AdoConnect直接连接网络服务器的IP,然后将数据资料传输上去或下载(Upload/Download)
例子:
AdoConnect1 连接总公司当地的数据库(Local)
Adoconnect2 连接网络服务器的数据库(Internet)
Adoquery1 连接AdoConnect1
AdoQuery2 连接AdoConnect2
1)用AdoQuery1取出需要上传的资料
Adoquery1.close;
Adoquery1.sql.clear;
Adoquery1.sql.add('Select f1,f2,f3 From XXX');
Adoqueru1.open;
2)资料上传
while not AdoQuery1.eof do
begin
Adoquery2.close;
Adoquery2.sql.clear;
Adoquery2.sql.add('Insert into XXX (f1,f2,f3) values');
AdoQuery2.sql.add('('''+adoquery1.fieldbyname('f1').AsString+''',');
AdoQuery2.sql.add(''''+inttostr(adoquery1.fieldbyname('f2').AsInteger) +''',');
AdoQuery2.sql.add(''''+adoquery.fieldbyname('f3').AsString+''')');
Adoquery2.execsql;
Adoquery1.next;
end;
3)用AdoQuery2取出需要下载的资料
Adoquery2.close;
Adoquery2.sql.clear;
Adoquery2.sql.add('Select f1,f2,f3 From YYY');
Adoqueru2.open;
4)资料下载
while not AdoQuery2.eof do
begin
Adoquery1.close;
Adoquery1.sql.clear;
Adoquery1.sql.add('Insert into XXX (f1,f2,f3) values');
AdoQuery1.sql.add('('''+adoquery1.fieldbyname('f1').AsString+''',');
AdoQuery1.sql.add(''''+inttostr(adoquery1.fieldbyname('f2').AsInteger) +''',');
AdoQuery1.sql.add(''''+adoquery.fieldbyname('f3').AsString+''')');
Adoquery1.execsql;
Adoquery2.next;
end;


构造大纲:
|------| |----------| |------|
|总公司| <-----> |网络服务器| <----> |分公司|
|------| |----------| |------|

当然在这里我只大概的构造,要做这个东西其实不是太难。
不过要做Data Synchronize就要注意很多事项了,一旦出错就会引起更改后的新资料会被旧资料下载后掩盖。
有什么不明白email联络吧~
ktzee2002@hotmail.com

^_^ Good Luck!!!
 
ktezz:
謝謝你的幫助﹐我真心的謝謝你﹗
可能﹐我過不久離開公司了。這個問題算了吧
 
搂住:
哈哈~~哪好吧~~
祝你事业更上一层楼吧!
Good Luck!
 
簡單的三層就可以實現﹐你可用xml﹐注冊遠程sql后﹐網絡好時可直接用﹐不好時離線用就可了。要是有什么問題可給我郵件﹕

info@mhnet.net

 
简单的三层就可以了。用web services,好简单的


数据不采用实时连接,使用定时上报数据的。主机有ADSL拨号+动态域名即可

有问题可以给我邮件 sandfromsky @yahoo.com @hotmail.com
 
欲窮千里目,更上一層樓!! 支持樓主的決定...
 
可以考虑VPN网络解决
 
可以采用OA系统。
 
雖說前途未必光明﹐但我對此還是有興趣的。可能自己負責不了 這個項目﹐但是我也對此發表一下自己的看法﹕

1﹐能不能不用注冊遠程sql﹐我們可以利用中間件同sql在一個區域﹐客 戶 端在另一個區域﹐客戶端通過socketconnection調用第一個區域的服務層。這樣﹐數據的安全性是否會得到提高﹖(我未做過﹐目前是設想)
2﹐如果在離線的狀態下﹐我們可否采用tclientdataset.savetofile。當網絡恢復時我們又可以將原數據恢復到服務器。但是問題是﹕離線時我們如何調用服務層的數據呢﹖
(我也未做過﹐只是設想)
 
其实我现在的技术使用FTP来做Data Synchronize了~
只是注册一个便宜简单的Ftp服务器就好了。
先将Data转成XML格式,然后在将几个文件压缩在一个文件里就好了。
这个效果很好,速度又快,也不会出现Data Lost的情况了~

^_^
 
黑已給我一個關于這方面的demo﹐所以分只有散給黑了。至于解決方案﹐要是各位朋友有興趣﹐我再另開貼公布。

謝謝各位
 
后退
顶部