索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
分区
就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的。
分表
就是把一张表按一定的规则分解成N个具有独立存储空间的实体表,系统读写时需要根据定义好的规则得到对应的表名称,然后再操作它。
分库
一旦分表,一个库中的表会越来越多,计算机处理性能是有限的,单机数据库的瓶颈也是显而易见的,分库后可以单独服务器集群部署,更好的提高大数据扩展能力。
读写分离
对于时效性不高的数据,可以通过读写分离缓解数据库压力。需要解决的问题:在业务上区分哪些业务上是允许一定时间延迟的,以及数据同步问题。
读写分离的实现:日志传送、事务复制和 Always On 技术。在 EF Core 中实现读写分离https://www.cnblogs.com/CreateMyself/p/9241523.htmL
https://github.com/Arch/UnitOfWork/tree/master/UnitOfWork
public static class ReadWriteExtensions
{
/// <summary>
/// Changes the database name. This require the databases in the same
machine. NOTE: This only work for MySQL right now.
/// </summary>
/// <param name="database">The database name.</param>
/// <remarks>
/// This only been used for supporting multiple databases in the same
model. This require the databases in the same machine.
/// </remarks>
public static void ChangeDatabase(this DbContext dbContext, string
nameOrConnectionString)
{
var connection = dbContext.Database.GetDbConnection();
if (connection.State.HasFlag(ConnectionState.Open))
{
connection.ChangeDatabase(nameOrConnectionString);
}
else
{
connection.ConnectionString = nameOrConnectionString;
}
}
/// <summary>
/// Changes the table name. This require the tables in the same
database.
/// </summary>
/// <param name="table"></param>
/// <remarks>
/// This only been used for supporting multiple tables in the same model.
This require the tables in the same database.
/// </remarks>
public virtual void ChangeTable<TEntity>(this DbContext dbContext,
string table)
{
if (dbContext.Model.FindEntityType(typeof(TEntity)).Relational() is
RelationalEntityTypeAnnotations relational)
{
relational.TableName = table;
}
}
}