標籤:
大體分為兩個方面:
1.用戶端 負責採集各個地區產生的資料資訊分為5個模組
1.1 配置模組
1.2 日誌模組
1.3 採集模組
1.4 備份模組
1.5 網路模組
2.伺服器 接收資料
1.1 配置模組
1.2 日誌模組
1.3 入庫模組
1.4 備份模組
1.5 網路模組
BIDR類 用來分裝採集好的資料
介面
Gather介面 用戶端採集模組
負責採集指定檔案中的資料(AAA伺服器產生的檔案)
需要實現的方法:
Collection<BIDR> gather();
採集檔案範例:
#briup1660|037:wKgB1660A|7|1239110900|44.211.221.247
#briup4418|037:wKgB4418A|7|1239138480|251.196.223.191
#|037:wKgB1660A|8|1239203860|44.211.221.247
...
..
問題:
1.怎麼獲得檔案路徑
2.瞭解每一行資料的意思
2.1 資料中使用的是|進行分割
2.2 資料一共分為倆種
遵循7上8下的規則
包含 7 的資料 表示使用者上線
包含 8 的資料 表示使用者下線
包含7的資料
資料分為五個部分
第一部分:登入的使用者名稱字(去掉#號)
第二部分:NAS伺服器的名稱
第三部分:一定是7
第四部分:上線的時間(單位是秒)
第五部分:登入時的IP
2.4 包含8的資料
資料分為五個部分
第一部分:一定是個符合 #
第二部分:NAS伺服器的名稱
第三部分:一定是8
第四部分:下線的時間(單位是秒)
第五部分:登入時的IP
3.如何讀寫資料
4.如何封裝資料
5.採集的資料分倆種情況
第一種情況資料:
使用者上線了同時也下線了
第二種情況資料:
使用者上線了但是還沒有下線
6.倆種資料情況怎麼處理
上面描述的第一種資料:
封裝好對象之後就準備傳給伺服器端
上面描述的第二種資料:
進行資料的備份,在一下次採集中,需要把這個備份的資料重新讀出來使用,因為使用者可能在一下次採集中下線了
7.第二次讀取資料的時候,如何從第一次讀完資料的下一行開始讀
可以記錄一下本次總共讀取了多少個位元組,下一次可以直接跳過這麼多個位元組,接著讀就可以了
8.在讀取過程中或者處理過程中,如果出現了異常,需要把資料進行備份
9.注意重要訊息的日誌記錄
Client介面用戶端網路模組
負責把採集好的資料發給伺服器
需要實現的方法:
void send(Collection<BIDR> c)
問題:
1.如何得到串連伺服器的相關資訊
2.如何得到採集好的資料
3.如何把資料發送給伺服器
4.如果發送資料失敗怎麼處理
5.注意重要訊息的日誌記錄
Server介面伺服器端網路模組
負責接收用戶端傳過來的資料
需要實現的方法:
Collection<BIDR> revicer();
void shutdown();
問題:
1.如何獲得伺服器啟動時候用的相關資訊
2.如何關閉關閉伺服器
3.如何接收用戶端傳過來的資訊
4.如何處理用戶端並發的問題
5.接收到資料之後一下步怎麼做
6.資料的接收或者處理過程備份的問題
7.注意重要訊息的日誌記錄
DBStore介面伺服器端入庫模組
負責接收到的資料插入到資料庫中
需要實現的方法:
void saveToDB(Collection<BIDR> c)
問題:
1.如何獲得串連資料庫的相關資訊
2.怎麼把資料插入到資料庫中
3.插入資料時候的效率問題
4.什麼樣的資料對應哪一種表
Logger介面公用的日誌模組
負責記錄系統運行過程的一些重要訊息
需要實現的方法:
void debug(String msg);
void info(String msg);
void warn(String msg);
void error(String msg);
void fatal(String msg);
問題:
1.怎麼來實現日記記錄
2.瞭解記錄層級
3.怎麼設定日誌的層級
4.怎麼獲得日誌對象
5.怎麼控制日誌的格式
6.怎麼控制日誌輸出到控制台和指定檔案中
BackUP介面公用的備份模組
負責備份一些沒有處理完的資料
需要實現的方法:
void store(String filePath, Object obj,
boolean append)
Object load(String filePath, boolean del)
問題:
1.如何獲得備份檔案存放的目錄資訊
2.如何把資料備份到檔案
3.如何讀取檔案中的備份資料
4.如何?備份資料時候的追加或者是覆蓋
5.如何控制讀取備份資料後檔案是否需要刪除
Configuration介面公用的配置模組
該模組相當於一個工廠
負責
1.產生各個模組對象
2.讀取各個模組所需的資訊,並且把資訊注入到每個模組中
注:這時候需要每個模組都實現介面WossModule
3.如果某個模組A中需要用到配置模組,那麼就需要把自己(因為自己就是配置模組)注入到這個模組A中
注:這時候需要模組A實現介面ConfigurationAWare
需要實現的方法:
Logger getLogger();
BackUP getBackup();
Gather getGather();
Client getClient();
Server getServer();
DBStore getDBStore();
問題:
1.怎麼獲得每個模組的相關資訊
2.如何建立每個模組的對象
3.怎麼把每個模組需要的資料注入到模組中
4.什麼時候可以把自己(配置模組本身)注入到需要的模組中
WossModule介面
例如:模組A中需要使用一些參數(比如讀取xml的路徑、串連資料的地址等等),模組A就需要實現WossModule介面,那麼這個模組A就有一個方法:
init(Properties p)
將來我們就可以調用這個init方法,把資料注入到模組A中
ConfigurationAWare 介面
Configuration是配置模組介面
例如:模組A中需要使用到配置模組,模組A就需要實現ConfigurationAWare介面,那麼這個模組A就有一個方法:
setConfiguration(Configuration c)
將來我們就可以調用這個方法將配置模組對象注入給模組A
資料庫:
1.有31張表
t_detail_1
..
t_detail_31
表中的列:
(
aaa_login_nameVARCHAR2(30),
login_ipVARCHAR2(32),
login_dateDATE,
logout_dateDATE,
nas_ipVARCHAR2(32),
time_durationNUMBER(10)
)
2.每張表對應一個日子
3.不同的資料需要插入到不同的表裡面
例如:1號(不關注年和月)產生的資料,就需要把資料插入到第1張表中,15號產生的資料,就需要插入到第15張表裡面
4.建表語句
使用PL/SQL建表
BEGIN
FOR i IN 1..31 LOOP
EXECUTE IMMEDIATE
‘CREATE TABLE t_detail_‘||TO_CHAR(i)||
‘(
aaa_login_nameVARCHAR2(30),
login_ipVARCHAR2(32),
login_dateDATE,
logout_dateDATE,
nas_ipVARCHAR2(32),
time_durationNUMBER(10)
)‘;
END LOOP;
END;
/
使用PL/SQL刪除表
BEGIN
FOR i IN 1..31 LOOP
EXECUTE IMMEDIATE
‘DROP TABLE t_detail_‘||TO_CHAR(i);
END LOOP;
END;
/
電信採集子項目1(大體架構)