PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
阿飄
Amateur Member
 

加入日期: Nov 2008
文章: 44
不要再想些有的沒的
verycd 的做法你可以參考 至少檔案有一個備份
可行的話早就有人做 你的想法我已經聽好幾個人說過了
要做也不是你做 google會去做
光是版權問題就搞死人
     
      
舊 2009-03-04, 02:34 AM #41
回應時引用此文章
阿飄離線中  
chlang
Master Member
 
chlang的大頭照
 

加入日期: Dec 2001
文章: 1,747
引用:
作者TRG-pro
2000% 的資料量=重複率又變成20了?怎麼變來變去?

舉個500%資料量的例子,

資料首先會先打散成 100 份. (假設1% 作一個切割)

然後儲存在 500 台電腦中. (每台儲存 1%, 全部總共有 500% 的資料量)

因此是 500個1%的來源。只要其中有10台不開機,順利完檔的機率有多少?


這個20倍/5倍的假設是可以調整的.
你覺得現在需要針對這個作討論嗎 ?

其次, 根據不同的上線機器數量, 而完檔率的假設,
這邊有個模擬程式, 是針對不同機器數量以及資料內容 作假設, 麻煩你參考.

http://forum.dodopie.com/viewthread.php?tid=2387

程式碼片段: (模擬單一台電腦的容量/上下線狀態)
代碼:

        public class Node
        {
                int nodeNo;
                boolean active=false;
                int nextActiveTime=0; // minute;
                ArrayList <String>pieces=new ArrayList<String>();
                int curActiveTime=0; // how many minute I left;
                Random r = new Random();
                int nodeSpeed=2; // mb/Min
                
                
                StaticsSimulator staticx=null;
                public Node(StaticsSimulator x)
                {
                        staticx=x;
                        this.nodeSpeed = x.nodeSpeed;
                }
                
                /**
                 * initialize my active time/status
                 */
                public void init() {
                        nextActiveTime = r.nextInt(avgSleepTime);
                }

                public ArrayList<String> getPieces()
                {
                        return pieces;
                }
                
                public void tick()
                {
                        nextActiveTime-=1;
                        curActiveTime-=1;
                        updateStatus();
                        if (active && pieces.size()<1)
                                System.out.println("What ?! I am empty:" + pieces.size());
                        
                }
                
                public void updateStatus()
                {
                        double rx = r.nextDouble();
                        if (rx<staticx.nodeCrashRate)
                        {
                                forceDeActiveX();
                                if (active)
                                        forceDeActive();
                                // node crashed.
                                pieces.clear();
                                staticx.failNodeCnt++;
                                active=false;
                                calcNextActive();
                                return;
                        }
                                
                        if (curActiveTime==0){
                                active=false;
                                forceDeActive();
                        }else
                        if (nextActiveTime==0){
                                forceActive();
                        }
                        
                        if (active)
                        {
                                // check my pieces. purge too onLineHealth pieces
                                // get less healthy pieces from other peer.
                                for (int i=0; i< nodeSpeed;i++)
                                {
                                        String myMostHealthPiece = "";
                                        if (pieces.size() >=nodeCapability){
                                                myMostHealthPiece=getMyMostHealthPiece();
                                                
                                                // don't do anything if my piece is too unhealthy.
                                                PieceHealth ph = totalPieces.get(myMostHealthPiece);
                                                if (ph.getGlobalHealth()<=1){
                                                        myMostHealthPiece="";
                                                        continue;
                                                }
                                                
                                        }
                                        String leastHealthPiece=staticx.getLeastHealthPiece(pieces);
                                        
        
                                        if (leastHealthPiece!=null && leastHealthPiece.length()>0){
                                                if (myMostHealthPiece!=""){
                                                        if (pieces.size()>=nodeCapability){
                                                                pieces.remove(myMostHealthPiece);
                                                                staticx.unRegPiece(myMostHealthPiece);
                                                                staticx.delPiece(myMostHealthPiece);
                                                        }
                                                }
                                                pieces.add(leastHealthPiece);
                                                staticx.regPiece(leastHealthPiece);
                                                staticx.addPiece(leastHealthPiece);
                                                
                                        }else
                                        {
                                                System.out.println("XD. no Least Health Piece exists ?");
                                        }
                                }
                                
                        }
                }
                
                /**
                 * 
                 * @return
                 */
                private String getMyMostHealthPiece() {
                        String ret="";
                        int health=-1;
                        for (String x:pieces)
                        {
                                PieceHealth ph=staticx.totalPieces.get(x);
                                if (ph.getOnLineHealth()>health)
                                {
                                        ret = x;
                                        health=ph.getOnLineHealth();
                                }
                        }
                        return ret;
                }

                
                private void forceDeActiveX()
                {
                        for (String i:pieces)
                        {
                                staticx.delPiece(i);
                        }
                }
                
                private void forceDeActive() {
                        for (String i:pieces)
                        {
                                staticx.unRegPiece(i);
                        }
                }
                


                /**
                 * 
                 * @param pieceNo
                 * @return -1 = no removal.
                 */
                public String addPiece(String pieceNo)
                {
                        String removed="";
                        if (pieces.size()>= nodeCapability)
                        {
                                removed=pieces.remove(0);
                        }
                        pieces.add(pieceNo);
                        
                        return removed;
                }
                
                public void forceActive()
                {
                        active=true;
                        calcNextActive();
                        calcCurActive();
                        // register my pieces
                        for (String i:pieces)
                        {
                                staticx.regPiece(i);
                        }
                }
                
                public void calcNextActive()
                {
                        
                        while (nextActiveTime <=0){
                                double d=r.nextGaussian();
                                nextActiveTime = avgSleepTime + (int)(d*avgSleepTime/4);
                        }
                }
                
                public void calcCurActive()
                {
                        double d=r.nextGaussian();
                        curActiveTime = activeDuration + (int)(d*activeDuration/4);
                }
                
                public boolean isActive()
                {
                        return active;
                }
                
                @Override
                public String toString()
                {
                        StringBuffer sb = new StringBuffer();
                        sb.append("Active:" + active);
                        sb.append("\nPieces:");
                        for (String pie:pieces)
                        {
                                sb.append(pie + "\t");
                        }
                        sb.append("\n");
                        return sb.toString();
                }
        }
 
舊 2009-03-04, 02:39 AM #42
回應時引用此文章
chlang離線中  
chlang
Master Member
 
chlang的大頭照
 

加入日期: Dec 2001
文章: 1,747
引用:
作者阿飄
不要再想些有的沒的
verycd 的做法你可以參考 至少檔案有一個備份
可行的話早就有人做 你的想法我已經聽好幾個人說過了
要做也不是你做 google會去做
光是版權問題就搞死人


嗯. 目前這是另外一個隱憂, 版權的問題.
目前的態度是 "個人空間, 除非使用者自己揭露給大眾知道 (釋放連結), 否則不會被觸碰"
但是的確還是可能會有法律爭議.

至於 Google 的作法叫做 "MapReduce", 主要是針對 "不關機的伺服器群" 而設計的.
跟我們 "不確定性散步" 的使用者有差別.


引用:
作者jjhuang.tw
不用的時候我會關掉..


根據我們的模擬模型.

目前主要是以 "平均一台機器 24 小時可能開機一小時" 作為模擬.

並沒有強迫使用者不關機啊 ^^;

此文章於 2009-03-04 02:47 AM 被 chlang 編輯.
舊 2009-03-04, 02:42 AM #43
回應時引用此文章
chlang離線中  
u3350829
Master Member
 

加入日期: Jun 2002
文章: 2,332
Red face

多年前....在下跟三五好友想說弄個網路分享,就使用當時很紅的
SoftEth,一台Server當Router + HUB然後其他人加入這個虛
擬的LAN,之後只要電腦開簡單的檔案分享區所有人都可以存取,
這個互通有無的方式最後甚至變成P2P大家分開抓不同的東西,
在透過這個互相分享,直到今日這個系統依然存在....缺的只是
更大的上傳頻寬而已XD,重點是這個系統幾乎可以穿過所有防火
牆(除非連80port這些都關光光)而且封包全部加密,別人想連到
這個虛擬LAN還需要有我們發的憑證才有辦法,安全性一流....
至於樓主您想做的東西基本上還不如自己架一台eMule Server然
後做好控管來的容易的多,頂多再自己改一些東西....供參考!
__________________
Es muss sein!
舊 2009-03-04, 02:55 AM #44
回應時引用此文章
u3350829離線中  
lanthanum
*停權中*
 
lanthanum的大頭照
 

加入日期: Aug 2008
文章: 35
這個早就有阿...
對岸的納米盤就是這樣阿,只是空間較小
且無法搜尋儲存內容..

只要改進搜尋就跟你說得差不多了
舊 2009-03-04, 02:59 AM #45
回應時引用此文章
lanthanum離線中  
Computer Cowboy
Master Member
 

加入日期: Apr 2001
文章: 1,933
引用:
作者chlang
嗯. 目前這是另外一個隱憂, 版權的問題.
目前的態度是 "個人空間, 除非使用者自己揭露給大眾知道 (釋放連結), 否則不會被觸碰"
但是的確還是可能會有法律爭議.

至於 Google 的作法叫做 "MapReduce", 主要是針對 "不關機的伺服器群" 而設計的.
跟我們 "不確定性散步" 的使用者有差別.




根據我們的模擬模型.

目前主要是以 "平均一台機器 24 小時可能開機一小時" 作為模擬.

並沒有強迫使用者不關機啊 ^^;


版權問題一定是大問題, 至於說連結不會給人散發出去, 就更加是很傻很天真了。
無心之失的不說, 如果我是釣魚的, 我只要加入樓主的社群, 再上傳一套有版權的電影, 然後將連結散發出去, 樓主不知道準備了多大的律師團隊?
舊 2009-03-04, 03:10 AM #46
回應時引用此文章
Computer Cowboy離線中  
applecore
Junior Member
 

加入日期: Jan 2007
文章: 800
我覺得技術性的問題的確是沒那麼重要,反而應該先討論的是主要的訴求應用在哪、可不可行。

1. 共享好康:這個目前很多系統運作的很好了,樓主的idea似乎也沒有特別的優勢。

2. 網路硬碟:我把這項跟「共享好康」區隔開來,在此項指的就是重複性不大的資料,顯然這會對空間利用率形成很大壓力,所以樓主的idea也不適合。

3. 異地備援:沒哪個企業機關敢用的,因為既然是重要的資料,誰敢放在不知哪個阿貓阿狗的硬碟上,這不是有沒有加密的問題,而是沒有哪個企業願意允許別人任意存取它的機密資料(即使別人"應該""大概""通常""也許"解不開)。

此外,如果是"真正的"分散處理 (免中央伺服器),那就很難實現分級服務收費機制與有效的搜尋了,而如果還是存在某種程度的中央伺服器,那就還是要面對運作成本與法律的問題。



我不是要潑樓主冷水喔,我覺得任何idea在初期一定是很粗糙的,需要很多的琢磨才會比較成熟可行,這很正常。但是如果沒有先思慮週延就貿然投入,邊作邊修正,最後可能就會作白工。
舊 2009-03-04, 03:14 AM #47
回應時引用此文章
applecore離線中  
foxtm
Power Member
 
foxtm的大頭照
 

加入日期: Jan 2002
您的住址: 台北苦命IT工人
文章: 586
Smile

引用:
作者chlang
這部份前面有提到了.
不是使用者 "把目前的檔案分享出去"
而是 使用者硬碟裡面有 "打散的資料"
因此多的 Peer 數目不是 5-20, 而是 1000

不..打散開來還是5份20份..
舉個例子你可能會比較清楚..

假設某個檔案片段被 A B C D E 五台電腦持有..而有一百個人需要這部份..

在傳統的 p2p 模式中.. F G H I J 等另五台電腦抓完以後..
這段片段可以轉為上傳..所以剩下的95人可以使用 A~J 電腦的上傳頻寬抓這段片段..

但在你的系統中..因為不能讓檔案重複太多份..
所以 F~J 的電腦抓完後不會放到分享區..不會提供上傳..
剩下的 95 人還是只能用 A~E 的上傳頻寬抓檔..

請問是 A~E 的上傳頻寬多呢?還是 A~J 的上傳頻寬多呢?

你被表面上的千份迷惑住了..
實際上在你的系統網路上檔案實際上只有5份20份..
雖然可以分散到各機器..
但實際上會遭受到持有檔案機器的總上傳頻寬限制
所以你的系統註定比 p2p 慢或是同速..
舊 2009-03-04, 03:30 AM #48
回應時引用此文章
foxtm離線中  
★_★
*停權中*
 
★_★的大頭照
 

加入日期: Nov 2008
您的住址: 志玲姊姊醜怪照
文章: 299
像樓上所說,人很難管理
到時一定會有幾個自私的傢伙
破解.放毒.放假檔.惡搞通通來
舊 2009-03-04, 08:09 AM #49
回應時引用此文章
★_★離線中  
咕咕鳥
*停權中*
 

加入日期: Mar 2008
您的住址: 墓仔埔旁的樹上
文章: 1
看壞的人居多.....

不過...樓上有人提出一個看法...
用在辦公室環境....這就很好用了...
我也建議這個方向
1.頻寬至少是100mb
2.有資料備份的需求
3.上班時間保證都開機
4.空閒磁區都有...
5.公司得花錢買軟體...不買告他...個人會找破解檔...(簡單說...你會有錢賺)
大於5個人的公司都會有資料備份的需求...一般是買NAS...
低價有RAID1的....也要10K左右...兩顆1T做RAID 1..只能用1T
你的軟體只要.不能跨網段...儲存在各磁碟機的資料加密
限制人數分一般版10人(3K)跟PRO版不限人數(5K)....
能設定備份率跟分享容量...(會開一個虛擬磁碟)

假設辦公室有20人
每人出20G就400G
扣掉一半的備份率...也有200G能用
(這樣..就不用買NAS了...)
A電腦掛了...MIS換一台...裝上你的軟體..
30分鐘...文件匣,MAIL又通通跑回來了
期間已經能正常工作了...
平常不用多花時間去備份....

很有機會賺錢...
至少我會跟我主管提要不要買...
之前公司的備份HD掛了....花兩萬去救....
有這軟體就不用買NAS了...
舊 2009-03-04, 09:09 AM #50
回應時引用此文章
咕咕鳥離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是09:51 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。