3:MIMIC数据库本地环境的搭建

本文作者

李昱熙,北京大学第一医院心内科主治医师。

本文提纲

安装前准备

安装程序与软件准备

安装本地MIMIC数据库

测试

01

前言

从这一次的文章开始,我们会涉及代码和具体的技术细节,以干货为主,就不多说废话了。因为考虑到windows操作系统还是主流,所以本文以windows 10 64位版本作为操作系统环境介绍。其他操作系统中的本地环境搭建过程,请参考MIMIC官网。

另外,本文选择了PostgreSQL作为数据库服务器,主要是因为一是免费,二是能很好的支持这个体量的数据(主要是相对于MySQL而言)。当然你也可以选择其他的数据库软件,MySQL、Oracle等,也都没有问题。

请注意:

在阅读本文之前,我们默认你已经对MIMIC数据库有所了解,并已经获取了数据的使用权限,如果还没有,请从头阅读我们此前的文章(见最上方链接)。

另外,整个本地数据库的搭建所需要耗费的时间长度取决于你的电脑配置,以及是否仔细看了我下面写的每一个字。会从3个小时到几天不等,请做好心理准备。但这是你想使用MIMIC无法跳过的一步,如果准备好了,我们就开始吧!

02

安装前准备

2.1 硬盘空间的准备

压缩文档约10G,解压缩之后大概需要占用40-50G的空间。最终数据库程序加导入的数据大约占用60G空间,如果再计划后续使用eICU的数据库,那么请起码预留200-300G空间的一个分区。

2.2 下载的准备

MIMIC和eICU数据表,csv或csv.gz格式(后者为压缩格式,占地较小)

下载地址:请参见之前文章的介绍;

创建数据表脚本文件[Github: mimic-code-master.zip],将buildmimic/postgres/下面的所有.sql文件保存在某位置,最好比较好找的地方,比如C:\mimic(本文后面都将按此地址举例);

下载地址:https://github.com/MIT-LCP/mimic-code/tree/master/buildmimic/postgres

PostgreSQL软件,笔者选择了10.02版本,windows64位版本;

下载地址:PostgreSQL官网(免费软件),具体看下方截图。

解压缩软件,推荐7-zip,可以无需手动解压缩。

下载地址:7-zip官网。

PostgreSQL下载版本选择界面

03

程序安装准备

3.1 安装PostgreSQL数据库服务器

双击下载好的安装包进行安装。建议所有步骤都点Next根据默认选项进行,默认的安装位置在C:\Programe Files\PostgreSQL\10。因为是在本地环境,一般不存在太大风险,推荐使用默认的密码postgres,如果你修改的话,一定牢牢记住这个密码。另外,安装过程中有一个步骤是存放数据库数据的位置,默认是在安装目录下的data文件夹,也可以自行选择其他位置,这个目录是最占空间的地方。期间会默认安装C++支持,不用管就可以。

安装完成之后,开始菜单里会多出PostgreSQL 10的目录。

3.2 安装命令行支持解压缩(7-zip)(可选)

这一步是可选项,但笔者推荐你完成这一步,可以省去后续的很多烦恼。另外,7-zip是一个非常好用的压缩软件,个人认为比RAR好用。安装7-zip,很简单,也很绿色,按默认来就可以。

如果你选择安装,那么下面的步骤比较关键。因为我们的目的是自动调用命令行批量解压缩数据原始文件,所以需要系统知道我们的7-zip安装到了哪里。这就要告诉操作系统具体的路径,也就是要修改windows系统的PATH。

具体可以:

右键点击我的电脑;

选择属性,在高级系统设置-高级里点击最下面的“环境变量”;

在弹出的对话框里下方的“系统变量”里找到Path,选中,并点击下方的“编辑”;

在弹出的对话框点击右侧的“新建”,输入7-zip的安装地址,默认的是C:\Program Files\7-zip,如果你安装到了其他的地方请修改成为相应的地址。

当设置完成之后,点击开始菜单-运行,输入“cmd”打开命令行。在里面输入7z,如果提示“找不到7z”,那就证明PATH没有设置好。如果像下图一样,出来一大堆内容,那就表示7-zip已经准备好了。

7-zip的系统PATH设置成功界面

04

安装本地MIMIC数据库

4.1 创建数据库

从开始菜单PostgreSQL目录里找到SQL Shell(psql),会打开一个命令行的界面。一路enter直到需要输入密码的地方,输入刚才让你一定牢牢记住的密码(默认是postgres)。注意输入的时候类似在linux系统下,不会有光标提示。

然后输入下列代码:

解释一下:第一行的意思是如果已经有了mimic这个数据库,那么就删除该数据库;所以如果是第一次运行,系统会提示:注意数据库“mimic”不存在,跳过DROP DATABASE。

第二行的意思是创建一个数据库,名称叫做mimic,所有者为postgres,也就是刚才的默认用户名了。

当然,数据库的名字、你的用户名等等你都可以自行选择。注意在后面过程中相应的地方也改成你自己的就可以。

4.2 连接到数据库

接下来,连接到我们刚才创建的数据库mimic。

输入下面的代码(如果你用了自己的数据库名字,请将mimic修改为你自己的数据库名):

不出意外,系统会提示已经连接到了数据库,以及当前的用户。

4.3 创建Schema

这一步需要强调一点,就是如果以后再次使用psql来查看管理数据库,那么会要求每次都要先运行上面第二行的代码。当然,如果是使用其他的数据库软件,比如后面我们会介绍到的Navicat,就不需担心这一点了,这些我们在下篇文章里详细讲。

下一步需要用到创建数据表的脚本文件,也就是之前2.2.2里我下载下来并放在C:/mimic里的那些.sql文件,记住那个位置,后面要用到。

4.4 创建数据表

这里要注意:如果是PostgreSQL 10的版本,那么就用后面带pg10的第一行那个,如果是其他的版本就用下面的那条。

这句的意思就是创建所有的数据表(table)。如果在过程中看到类似“注意:表xxx不存在,DROP TABLE”的字样,不用担心,这是程序设计的容错机制,保证同一个表不会重复创建。

4.5 导入数据

这基本是最后的步骤了,但越到最后,要求我们越有耐心。

上面代码中的第一行,是设置遇到错误就停止导入,以便我们及时发现问题。

第二行是确定MIMIC数据所在的目录。我把它放在了D盘mimic文件夹中的v1_4这个文件夹里,如果你放在其他地方,请修改代码中引号里的内容。

第三行是调用自动导入数据的命令。这其中就会用到上面3.2里解压缩的7-zip了。会有几种情况:

如果你已经把所有的未压缩的文件准备好,也就是.csv格式(注意,有些windows设置可能不显示文件后缀名,所以可能你认为的.csv格式其实是.csv.gz也就是压缩的.gz格式),那么请调用postgres_load_data.sql;

如果你像我一样,硬盘空间有限,也不想一个一个解压缩,那可以直接利用刚才我们设置好的7-zip来自动解压缩,但前提一定是要把PATH写对,能够在命令行直接输入7z来调用才可以。那么就按照上面的第三行来写;

当然,你也可以选择使用gzip。那就调用postgres_load_data_gz.sql。一定不要选错。

数据导入中

如果你能看到上图里最下面这几行字,停止在COPY 7567,那么基本上就成功了,后面做的就是需要等待。这个等待的时间取决于你的电脑配置,主要看是否有固态硬盘,可能是2-3个小时,也可能是十几个小时,也可能是一整天。

所以,接下来的时间,大可去睡觉,或者干别的事情了。

笔者第一次用了一台老的自用笔记本,花了大约30个小时完成了所有的数据导入;第二次写这篇教程,用了一台配置较高的台式机,花了大约3小时不到的时间。

听在COPY 7567这里不动的意思是:已经复制了前三个数据表的数据,以及每个表的数据量。因为第四个表CHARTEVENTS是最大的一个,所以耗时会很长。如果最后你能看到第四行变成了COPY 330712483,意味着CHARTEVENTS里的所有数据都导入成功。不过,最后也许第四行会显示COPY 0,这时不用担心是不是没有复制成功,而是因为PostgreSQL自动把这一个大表分割成了若干个子表,chartevents_1, chartevents_2等等。在后续的检查环节,我们可以查看一下数据表中的行数,如果也符合330712483,就意味着没有遗漏数据。

除了第4个表,第19个表NOTEEVENTS耗时也比较长。这两个表是MIMIC数据库里压缩之后大小超过1G的两个表。

最后大功告成,可以重新看到熟悉的mimic=#以及闪动的光标。

4.6 建立索引

因为数据库非常大,其中每一个数据查询如果没有设置索引,都会变得非常慢,所以下面设置索引是非常关键的步骤。

依然会提示“注意:索引xxx不存在,这都没有关系”。以及不要忘记把代码里面的位置改成你自己存放sql文件的位置。

当然,建立索引也是要耗费一些时间的。

05

测试是否成功

如果都做完了上面的内容,那么就可以来测试一下,是不是大功告成了!

这是一个很简单的SQL语句,意思是从ICUSTAYS这个表(记录了患者进出ICU的数据)里前十条包含icustay_id(患者ICU入住的ID)、intime(进入时间)、outtime(出ICU时间)的数据。如果上面都没有出任何问题,那么应该可以顺利看到查询出来的结果。

当然了,MIMIC也提供了一个完整的数据检查脚本,可以运行下面的语句来测试,但也是要耗费一定时间的哦。

最后会出来一张有26行记录的预期数据量与实际导入数据量的比较,如果最后一行row_count_check都是PASSED,那么就证明一切都没有问题了。

06

写在最后

如果你认真阅读了上面的每一步,应该都是可以完成本地数据库环境的搭建。当然了,过程中可能会出现任何不顺利的地方,有问题欢迎随时留言,也可以去MIMIC的官方Github上提出问题。

下期预告

下一篇文章,我们会开始,从临床需求入手,介绍一些最简单的查询数据库的语句,让你开始真正享受到MIMIC的宝贵!

如果各位读者遇到任何问题,欢迎大家在下方留言,我们会邀请作者解答可能遇到的问题。任何意见建议也请留言告诉我们。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180326G1R6PY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券