数据库教程-SQL Server海量数据的快速存储

SQL Server数据表批量数据插入

海量数据的存储与管理是实现数据有效分析的基础,借助数据库技术,我们可以实现海量数据的存储与管理。在数据库常见操作语句中,增删改查是我们通常使用的做法。其中insert语句可以实现简单数据的插入操作。所谓简单数据一般指数据的条数较少,在此种情况下我们可以单条或者多条数据进行insert插入操作。但是针对海量数据插入操作,如果直接使用insert语句进行插入,其效率低下,花费的时间较长。

本文主要介绍基于文件导入的海量数据的SQL Server数据库导入操作。通过使用该方法可以快速实现百万级条数的数据批量导入。为讲解演示海量数据批量导入操作,本文提供了CSV格式模拟数据,数据条数为150万条。该文件数据格式描述如下图所示:

海量数据150万条销售记录

针对海量数据存储,SQL Server数据库管理系统提供Bulk Insert方法,通过文件导入形式实现数据的快速批量导入与存储。该方法的优势在于将所需导入数据以外部文件形式直接读取文件,将其写入对应的数据表中,避免了insert语句逐条写入而导致的时间成本的增加。BULK Insert语句语法描述如下:

Bulk Insert基本语法

Bulk Insert语句语法描述如上图所示,其中主要语法及参数说明如下:

Bulk Insert语法说明

在明确批量外部数据导入操作方法基本语法之后,我们可以借助提供包含150万条记录的测试数据进行海量数据导入操作(如需测试数据可私信作者发送)。具体操作步骤描述如下:

1、数据表的创建

在进行批量数据导入之前需要首先创建与数据源格式一致的数据表。本例创建了名为Sales的数据表用于实现存储数据。该表主要字段及数据类型设计描述如下图所示:

创建与数据源一致的数据表Sales

2、编写Bulk Insert导入命令

在完成数据表创建之后,下一步则可以使用Bulk Insert语句实现外部海量数据导入操作,本例所编写的批量导入命令描述如下图:

测试执行导入150万条记录

批量导入操作命令及测试结果显示如上图所示,最终我们可以看到150万行受到影响及存储成功。其中命令部分代码说明如下:

批量插入实现代码说明

3、测试结果

完成海量数据导入之后我们可以通过SQL 查询语句查询所存储的数据。查询结果如下所示:

数据查询结果

测试结果显示查询到的数据条数为150万条,测试结果表明海量数据使用Bulk Insert语句插入成功。

本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可以联系作者,共同探讨。期待大家关注!相关文章链接如下:

动态表单存储设计

前言

Flowable, Activiti 等开源解决方案所提供的表单引擎是没有业务表单数据持久化的功能(即自动创建表,将表单数据持久化功能),只提供动态表单创建以及渲染功能。目前来看表单引擎服务主要功能如下:

  • 动态表单配置以及渲染(主要在于前端实现)
  • 表单数据库持久化

以下是目前实现业务表单数据持久化的几种方案:

以下方案都以请假流程的表单为例,比较简单就请假天数(days)以及请假理由(reason),动态表单如下所示:

方案一:动态添加字段

一个表单对应数据库的一张或多张物理表(主从表)

针对请假流程如何操作呢?给请假流程表单创建一张数据表,包含字段 days 以及 reason 。其他业务表单也是如此操作。

该方案存在的问题:

  • 一个表单对应数据库的一张或多张物理表,随着业务的增多,数据库的物理表会不断膨胀。
  • 业务表单字段需要修改时(比如给请假流程添加一个开始时间字段,就需要调整物理表结构),其对应的物理表结构也需要修改,在物理表很多数据时,改变物理表scheme会锁表。

方案二:预留空白字段,动态分配

业务数据存储表:

业务表单属性表:

实际操作下来,存储是这样哒:

那么动态字段变更需要修改表字段配置表即可。缺点:

  • 操作数据的时候都需要先去 map 中转以下才能查询(程序层面可以解决)
  • 如果一张业务表保存所有的数据话,不利于优化(可以进行扩展,配置多张业务表,不过这样也可能会出现方案一中物理表爆炸的问题)

方案三:属性使用 KEY/VALUE 格式存储

将表单数据全部都用 Key/Value 的格式来存储。参考如下:

具体操作后即是:

动态添加属性字段只需要添加 Key/value。题外话,reddit 的数据库就两张表,也是这样的设计方案,不过现在已经改掉了,成为历史。缺点:

  • 不太好支持关联子表
  • 程序中处理取值不方便

方案四:MongoDB 方案设计

MongoDB 方案的话,只需要将前端发过来的JSON写入即可,这里还是以请假流程为例:

集合内数据允许动态添加字段:

集合类似于关系型数据库中的表,可以存储不规则的数据,只能说 Mongodb 擅长干这种事情。

总结

以上方案设计生产环境使用还需要改进使用,目前市面上用的多得应该是方案二,MongoDB 也是一个不错选项,仅在数据持久化这块,具体业务场景下使用 MongoDB + 关系型数据库的设计也可以是一个备选的方案。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。