提到数据库的基本操作,无论关系型还是非关系型,首先想到的肯定是数据的增删改查 (Create, Read, Update, Delete),下面记录一下MongoDB里面的CRUD操作。
MongoDB 基础知识
MongoDB 是一个基于 分布式文件存储 的数据库。由 C++ 语言编写。
MongoDB 相关概念
mongodb中基本的概念是文档、集合、数据库,和传统关系型数据库相关概念的对应关系如下表:
RDBMS | MongoDB | 描述 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | MongoDB可以使用DbRef或者$lookup实现 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
SQL Server Slide Window partition
上篇文章详细介绍了表分区的概念和如何创建分区表。
一个分区表创建好之后,随着数据量的逐渐增长,历史数据越来越不受待见:查询和更新频率越来越低,那么把这些历史数据进行归档就十分必要了。如果使用常规的SELECT、INSERT、DELETE进行历史数据归档的话,会出现以下的一系列问题:
DELETE效率太低
由于DELETE单个语句是一个事务性的语句,要么全部成功,要么全部失败。那么可想如果删除的是亿级别的数据,那么日志增长,IO负荷非常的大。
迁移过程表会被锁住,这样可能会出现死锁,一旦迁移失败,又会造成更大的IO问题。
这时候,在SQL Server中分区表有一个非常实用的语句 ALTER TABLE …SWITCH
,这个DDL可以快速的将同文件组的表的某个分区迅速的转移到另外的表。这个是利用数据的位置偏移量的指针的转移到新表的方法来实现的。这种方案转移数据非常快。
SQL Server表分区
某种特定业务下,部分业务数据可能只保留比较短的时间,例如每日的流量日志数据,可能每天亿级别的数据增长,随着数据量的逐渐增长,你会发现数据库能性能越来越慢,查询速度会明显变慢,而这时要想提高数据库的查询速度,你肯定会想到索引这种方式,但是随着索引的引入,数据的插入和更新也会变慢,因为在数据插入的时候,索引也是需要重建的。那怎么办呢? (其实我觉得这种应用场景更好的解决方法是用流式处理的方式)
一个最简单的解决方法就是把一个大表拆分成多个小表,这个就叫做表分区,表分区有两种:
- 水平分区 (行级)
- 垂直分区 (列级)
下面主要说的是水平分区。
表分区有以下优点:
- 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
- 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
- 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
- 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
分区表是把数据按某种标准划分成区域存储在不同的文件组中,使用分区可以快速而有效地管理和访问数据子集,从而使大型表或索引更易于管理。合理的使用分区会很大程度上提高数据库的性能。
创建分区需要如下个步骤:
- 创建文件组
- 创建分区函数
- 创建分区方案
- 创建或者修改使用分区方案的表