分区

分区就是把一个数据表的文件和索引分散存储在不同的物理文件中。把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,数据库不同实现方式有所不同。

与分表不同,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了。分区的概念,我觉得就想突破磁盘I/O瓶颈,想提高磁盘的读写能力,来增加数据库的性能。

分区实现是比较简单的,建立分区表,根建平常的表没什么区别,并且对开发代码端来说是透明。

postgresql10以上的自动分区分表功能:

1、首先创建主分区表:

create table fenbiao(
id int,
year varchar
) partition by list(year)

这里设置的是根据year列进行数据分表;创建后使用navicat是看不到的;

2.创建分表:

create table fenbiao_2017 partition of fenbiao for values in ('2017');
create table fenbiao_2018 partition of fenbiao for values in ('2018');

这样这两天数据会依靠规则插入到不同分表中,如果插入一条不符合规则的数据,则会报错误:no partition of relation "fenbiao" found for row.

分表

分表从表面意思上看呢,就是把一张表分成N多个小表,每一个小表都是完正的一张表。分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。

分表后单表的并发能力提高了,磁盘I/O性能也提高了。并发能力为什么提高了呢,因为查寻一次所花的时间变短了,如果出现高并发的话,总表可以根据不同 的查询,将并发压力分到不同的小表里面。

分库分表

分库分表把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。

数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。

FreeSql.Repository 之分表

FreeSql 提供 AsTable 分表的基础方法,GuidRepository 作为分存式仓储将实现了分表与分库(不支持跨服务器分库)的封装。

var logRepository = fsql.GetGuidRepository<Log>(null, oldname => $"{oldname}_201903");

上面我们得到一个日志仓储按年月分表,使用它 CURD 最终会操作 Log_201903 表。

注意事项:

  • 不能使用 CodeFirst 迁移分表,开发环境时仍然可以迁移 Log 表;
  • 不可在分表分库的实体类型中使用《延时加载》;

跨表查询

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);

期待更多发散。。。

巧用AsTable

var sql = fsql.Select<User>().AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList()

系列文章导航

  • (一)入门

  • (二)自动迁移实体

  • (三)实体特性

  • (四)实体特性 Fluent Api

  • (五)插入数据

  • (六)批量插入数据

  • (七)插入数据时忽略列

  • (八)插入数据时指定列

  • (九)删除数据

  • (十)更新数据

  • (十一)更新数据 Where

  • (十二)更新数据时指定列

  • (十三)更新数据时忽略列

  • (十四)批量更新数据

  • (十五)查询数据

  • (十六)分页查询

  • (十七)联表查询

  • (十八)导航属性

  • (十九)多表查询

  • (二十)多表查询 WhereCascade

  • (二十一)查询返回数据

  • (二十二)Dto 映射查询

  • (二十三)分组、聚合

  • (二十四)Linq To Sql 语法使用介绍

  • (二十五)延时加载

  • (二十六)贪婪加载 Include、IncludeMany、Dto、ToList

  • (二十七)将已写好的 SQL 语句,与实体类映射进行二次查询

  • (二十八)事务

  • (二十九)Lambda 表达式

  • (三十)读写分离

  • (三十一)分区分表

  • (三十二)Aop

  • (三十三)CodeFirst 类型映射

  • (三十四)CodeFirst 迁移说明

  • (三十五)CodeFirst 自定义特性

转载于:https://www.cnblogs.com/FreeSql/p/11531435.html

FreeSql (三十一)分区分表相关推荐

  1. MySQL分区分表 原理详解

    MySQL分区分表 为什么要分区和分表 我们的数据库数据越来越大,随之而来的是单个表中数据太多,以至于查询速度过慢,而且由于表的锁机制导致应用操作也受到严重影响,出现数据库性能瓶颈. MySQL中有一 ...

  2. 数据库分区分表以及读写分离

    数据库分区分表以及读写分离 Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己 ...

  3. mysql大数据解决方案--分区分表分库

    这篇文章主要介绍了MyBatis实现Mysql数据库分库分表操作和总结,需要的朋友可以参考下 前言 作为一个数据库,作为数据库中的一张表,随着用户的增多随着时间的推移,总有一天,数据量会大到一个难以处 ...

  4. 关系型数据之分区分表分库

    文章目录 1.为什么需要分区分表分库 2.各种分区分表分库的情况 3.弊端 3.1分区弊端 3.2分表分库弊端 1.为什么需要分区分表分库 数据量达到一定规模,进行常规的sql语句优化已经效果不大的情 ...

  5. sql server 数据库分区分表

    sql server 数据库分区分表 作为演示,本文使用的数据库 sql server 2017 管理工具 sql server management studio 18,,创建数据库mytest,添 ...

  6. mysql表分区占用存储_MySQL 分区分表应用场景分析和分区中可能遇到的坑点

    MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...

  7. mysql 分区表_MySQL 分区分表应用场景分析和分区中可能遇到的坑点

    MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...

  8. SQL Server数据库分区分表

    当一个数据表的数据量达到千万级别以后,每次查询都需要消耗大量的时间,所以当表数据量达到一定量级后我们需要对数据表水平切割.水平分区分表就是把逻辑上的一个表,在物理上按照你指定的规则分放到不同的文件里, ...

  9. Hive基础知识(三)--分桶表

    1.分桶表 分桶和分区一样,也是一种通过改变表的存储模式,从而完成对表优化的一种调优方式,但和分区不同的是,分区是将表拆分到不同的子目录中进行存储,而分桶是将表拆分到不同文件中进行存储. 2.分桶操作 ...

最新文章

  1. DeFi协议ValueDeFi疑似再次遭到攻击
  2. .net String Formatter 格式转换
  3. python分类算法评估模型_Python机器学习(sklearn)——分类模型评估与调参总结(下)...
  4. win7 更新android sdk,大神为你详解win7系统android sdk manager无法更新的处理对策
  5. Linux 下进入含空格的目录(以及文件夹名开头为`(`)
  6. VOJ1067 【矩阵经典7 构造矩阵】
  7. 全网首发:安装Python(或其他软件)出现0x80072f7d错误的解决办法
  8. 2022年全球与中国电动汽车充电设备市场现状及未来发展趋势
  9. 安卓外置SD卡linux,Android获取机身存储、内置SD卡与外置TF卡路径
  10. 图卷积网络GRAPH CONVOLUTIONAL NETWORKS
  11. 电力物联网大数据平台架构及应用
  12. linux虚拟机对外部sd卡格式化和分区
  13. 广告学本科--现代管理学--[00107]
  14. 2-6_Cleaning_Data
  15. 《程序员的数学思维修炼》 读书笔记
  16. mysql怎么给数据加序号_MySQL数据库之在mysql中给查询的结果添加序号列
  17. 最精炼的Excel金额大写公式
  18. Vscode上使用opencv(C++接口,Windows篇)
  19. 常用NLP标注工具简单介绍
  20. JS 页面刷新后给下拉框赋值

热门文章

  1. 屏幕录像专家6.0_迅捷屏幕录像工具和屏幕录像专家哪个更好用?
  2. SparkStreaming -Kafka数据源
  3. oracle 9i 只读模式,我的oracle 9i学习日志(6)--Starting Up and shutting down a Database
  4. 【LeetCode - 122】买卖股票的最佳时机 II(贪心 或 dp)
  5. c语言链表实现数组逆置,数组与链表等顺序表逆置
  6. AVR单片机计算器C语言源程序,AVR单片机简单计算器的Proteus仿真实现+源码
  7. java获取行号_java – 如何获取一个方法的行号?
  8. 《SuperMap GIS二次开发MVC实战训练---江海区慢性病防治院系统》项目研发阶段性总结
  9. 长春金桥计算机学校,金桥学校2017年招生简章
  10. matlab usb cam,Matlab环境下使用USB2.0摄像头编程image acquisition tools(读书笔记) | 学步园...