隨著資料不斷增長,資料庫中單錶無法滿足大資料量的儲存,所以我們就提出按照自然時間、單站點資訊分表來儲存大量秒級資料。
例如:大氣、水利、交通(gps)資訊監測系統中的實時資料進行儲存,一般時按照開始時間、結束時間、單站點、多站點、監測專案等方式進行資料查詢、分析、圖表。
如 按5分鐘單站點的資料12*24(小時)*365(天)*(監測項)10=100w ,也就是乙個站點一年資料量 100w條,100站*100w =1億條這樣的資料是無法滿足快速查詢。
所以我們就按照 」tb_5m_年_站號「建表名稱,tb_時間刻度_年份_站號建表 。 "tb_5m_2016_a0001", "tb_5m_2016_a0002", "tb_5m_2016_a0003",, "tb_5m_2016_a0004"
條張表 儲存100w,如儲存1分鐘的資料單錶就 500w條, 如1秒鐘資料:60*500w=3億條資料,這樣不行啊,我們要以在分表,分表規則中加乙個月份,tb_5m_年_月_站號,這裡就不說了。
問題來,我們如何方便快捷編寫**那?,我們還想用orm(ef)進行資料查詢,就拿我們真實專案來說吧。
思路,我們用.net開發,在資料庫建基本表(tb_5m_base)來實現ef,用 dbcontext實現資料訪問。
別的不多說了,直接來**吧,
功能5分鐘資料查詢,使用者指定開始時間、結束時間、單(多)選擇站點、單(多)選擇監測 專案,進行資料查詢功能。
**發如下:
public class tb_5m_base
public datatime time
public string pcodes
public double values
}public partial class entityframeworkdatacontext : dbcontext
public entityframeworkdatacontext()
: base("name=entityframeworkdatacontext")
protected override void onmodelcreating(dbmodelbuilder modelbuilder)
public dbset< tb_5m_base> tb_5m_base
public class blldataquery
);int year = starttime.year;
int num = endtime.year;
string str = string.empty;
string commandtext = string.empty;
pcodus=pcodus;
while (year <= num) //年份跨年也沒問題
__src", year, strstationid );
commandtext = string.format("select * from where time between '' and '' and pcodes in () ", new object );
try}
catch (exception exception)
}year++;
}return list;
}
大資料量資料儲存分表例項(企業級應用系統)附原碼
隨著資料不斷增長,資料庫中單錶無法滿足大資料量的儲存,所以我們就提出按照自然時間 單站點資訊分表來儲存大量秒級資料。例如 大氣 水利 交通 gps 資訊監測系統中的實時資料進行儲存,一般時按照開始時間 結束時間 單站點 多站點 監測專案等方式進行資料查詢 分析 圖表。如 按5分鐘單站點的資料12 2...
大資料量的儲存分表常見演算法
以下是幾種常見的分表演算法。1.按自然時間來分表 分庫 2.按數字型別hash分表 分庫 如果我們 要儲存使用者的資訊,我們應用的註冊量很大,我們用單錶是不能滿足儲存需求的,那麼我們就可以用使用者的編號來進行hash,常見的是用取餘操 作,如果我們要分30張表來儲存使用者的資訊,那麼使用者編號為1的...
大資料量的分表方法
以下是幾種常見的分表演算法。1.按自然時間來分表 分庫 2.按數字型別hash分表 分庫 如果我們要儲存使用者的資訊,我們應用的註冊量很大,我們用單錶是不能滿足儲存需求的,那麼我們就可以用使用者的編號來進行hash,常見的是用取餘操作,如果我們要分30張表來儲存使用者的資訊,那麼使用者編號為1的使用...