分區(qū)
分區(qū)就是把一個(gè)數(shù)據(jù)表的文件和索引分散存儲在不同的物理文件中。把一張表的數(shù)據(jù)分成N多個(gè)區(qū)塊,這些區(qū)塊可以在同一個(gè)磁盤上,也可以在不同的磁盤上,數(shù)據(jù)庫不同實(shí)現(xiàn)方式有所不同。
與分表不同,一張大表進(jìn)行分區(qū)后,他還是一張表,不會變成二張表,但是他存放數(shù)據(jù)的區(qū)塊變多了。分區(qū)的概念,我覺得就想突破磁盤I/O瓶頸,想提高磁盤的讀寫能力,來增加數(shù)據(jù)庫的性能。
分區(qū)實(shí)現(xiàn)是比較簡單的,建立分區(qū)表,根建平常的表沒什么區(qū)別,并且對開發(fā)代碼端來說是透明。
postgresql10以上的自動分區(qū)分表功能:
1、首先創(chuàng)建主分區(qū)表:
create table fenbiao( id int, year varchar ) partition by list(year)
這里設(shè)置的是根據(jù)year列進(jìn)行數(shù)據(jù)分表;創(chuàng)建后使用navicat是看不到的;
2.創(chuàng)建分表:
create table fenbiao_2017 partition of fenbiao for values in ('2017'); create
table fenbiao_2018 partition of fenbiao for values in ('2018');
這樣這兩天數(shù)據(jù)會依靠規(guī)則插入到不同分表中,如果插入一條不符合規(guī)則的數(shù)據(jù),則會報(bào)錯(cuò)誤:no partition of relation "fenbiao"
found for row.
分表
分表從表面意思上看呢,就是把一張表分成N多個(gè)小表,每一個(gè)小表都是完正的一張表。分表后數(shù)據(jù)都是存放在分表里,總表只是一個(gè)外殼,存取數(shù)據(jù)發(fā)生在一個(gè)一個(gè)的分表里面。
分表后單表的并發(fā)能力提高了,磁盤I/O性能也提高了。并發(fā)能力為什么提高了呢,因?yàn)椴閷ひ淮嗡ǖ臅r(shí)間變短了,如果出現(xiàn)高并發(fā)的話,總表可以根據(jù)不同
的查詢,將并發(fā)壓力分到不同的小表里面。
分庫分表
分庫分表把原本存儲于一個(gè)庫的數(shù)據(jù)分塊存儲到多個(gè)庫上,把原本存儲于一個(gè)表的數(shù)據(jù)分塊存儲到多個(gè)表上。
數(shù)據(jù)庫中的數(shù)據(jù)量不一定是可控的,在未進(jìn)行分庫分表的情況下,隨著時(shí)間和業(yè)務(wù)的發(fā)展,庫中的表會越來越多,表中的數(shù)據(jù)量也會越來越大,相應(yīng)地,數(shù)據(jù)操作,增刪改查的開銷也會越來越大;另外,一臺服務(wù)器的資源(CPU、磁盤、內(nèi)存、IO等)是有限的,最終數(shù)據(jù)庫所能承載的數(shù)據(jù)量、數(shù)據(jù)處理能力都將遭遇瓶頸。
FreeSql.Repository 之分表
FreeSql 提供 AsTable 分表的基礎(chǔ)方法,GuidRepository 作為分存式倉儲將實(shí)現(xiàn)了分表與分庫(不支持跨服務(wù)器分庫)的封裝。
var logRepository = fsql.GetGuidRepository<Log>(null, oldname =>
$"{oldname}_201903");
上面我們得到一個(gè)日志倉儲按年月分表,使用它 CURD 最終會操作 Log_201903 表。
注意事項(xiàng):
* 不能使用 CodeFirst 遷移分表,開發(fā)環(huán)境時(shí)仍然可以遷移 Log 表;
* 不可在分表分庫的實(shí)體類型中使用《延時(shí)加載》;
跨表查詢
var sql = fsql.Select<User>() .AsTable((type, oldname) => "table_1")
.AsTable((type, oldname) => "table_2") .AsTable((type, oldname) => "table_3")
.ToSql(a => a.Id);
得到SQL:
select * from (SELECT a."Id" as1 FROM "table_1" a) ftb UNION ALL select * from
(SELECT a."Id" as1 FROM "table_2" a) ftb UNION ALL select * from (SELECT a."Id"
as1 FROM "table_3" a) ftb
多表查詢:
var sql = fsql.Select<User>().LeftJoin<UserGroup>((a,b) => a.UserGroupId ==
b.Id) .AsTable((type, oldname) => oldname + "_1") .AsTable((type, oldname) =>
oldname + "_2") .AsTable((type, oldname) => oldname + "_3") .ToSql(a => a.Id);
期待更多發(fā)散。。。
巧用AsTable
var sql = fsql.Select<User>() .AsTable((a, b) => "(select * from tb_topic
where clicks > 10)") .Page(1, 10).ToList()
系列文章導(dǎo)航
*
(一)入門 <https://www.cnblogs.com/FreeSql/p/11531300.html>
*
(二)自動遷移實(shí)體 <https://www.cnblogs.com/FreeSql/p/11531301.html>
*
(三)實(shí)體特性 <https://www.cnblogs.com/FreeSql/p/11531302.html>
*
(四)實(shí)體特性 Fluent Api <https://www.cnblogs.com/FreeSql/p/11531304.html>
*
(五)插入數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531306.html>
*
(六)批量插入數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531309.html>
*
(七)插入數(shù)據(jù)時(shí)忽略列 <https://www.cnblogs.com/FreeSql/p/11531316.html>
*
(八)插入數(shù)據(jù)時(shí)指定列 <https://www.cnblogs.com/FreeSql/p/11531318.html>
*
(九)刪除數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531320.html>
*
(十)更新數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531321.html>
*
(十一)更新數(shù)據(jù) Where <https://www.cnblogs.com/FreeSql/p/11531324.html>
*
(十二)更新數(shù)據(jù)時(shí)指定列 <https://www.cnblogs.com/FreeSql/p/11531327.html>
*
(十三)更新數(shù)據(jù)時(shí)忽略列 <https://www.cnblogs.com/FreeSql/p/11531334.html>
*
(十四)批量更新數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531335.html>
*
(十五)查詢數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531339.html>
*
(十六)分頁查詢 <https://www.cnblogs.com/FreeSql/p/11531341.html>
*
(十七)聯(lián)表查詢 <https://www.cnblogs.com/FreeSql/p/11531346.html>
*
(十八)導(dǎo)航屬性 <https://www.cnblogs.com/FreeSql/p/11531352.html>
*
(十九)多表查詢 <https://www.cnblogs.com/FreeSql/p/11531362.html>
*
(二十)多表查詢 WhereCascade <https://www.cnblogs.com/FreeSql/p/11531372.html>
*
(二十一)查詢返回?cái)?shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531376.html>
*
(二十二)Dto 映射查詢 <https://www.cnblogs.com/FreeSql/p/11531381.html>
*
(二十三)分組、聚合 <https://www.cnblogs.com/FreeSql/p/11531384.html>
*
(二十四)Linq To Sql 語法使用介紹 <https://www.cnblogs.com/FreeSql/p/11531392.html>
*
(二十五)延時(shí)加載 <https://www.cnblogs.com/FreeSql/p/11531395.html>
*
(二十六)貪婪加載 Include、IncludeMany、Dto、ToList
<https://www.cnblogs.com/FreeSql/p/11531404.html>
*
(二十七)將已寫好的 SQL 語句,與實(shí)體類映射進(jìn)行二次查詢
<https://www.cnblogs.com/FreeSql/p/11531416.html>
*
(二十八)事務(wù) <https://www.cnblogs.com/FreeSql/p/11531423.html>
*
(二十九)Lambda 表達(dá)式 <https://www.cnblogs.com/FreeSql/p/11531425.html>
*
(三十)讀寫分離 <https://www.cnblogs.com/FreeSql/p/11531430.html>
*
(三十一)分區(qū)分表
*
(三十二)Aop <https://www.cnblogs.com/FreeSql/p/11531471.html>
*
(三十三)CodeFirst 類型映射 <https://www.cnblogs.com/FreeSql/p/11531543.html>
*
(三十四)CodeFirst 遷移說明 <https://www.cnblogs.com/FreeSql/p/11531550.html>
*
(三十五)CodeFirst 自定義特性 <https://www.cnblogs.com/FreeSql/p/11531576.html>
熱門工具 換一換