首页 > 范文大全 > 正文

基于Redis的人本电子健康系统的设计与实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Redis的人本电子健康系统的设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘要】随着生活水平的不断提高,人们对于健康的需求也是与日俱增,传统的以医疗为主的健康模式也在逐渐的变化,人们更希望的是通过日常的保健等行为使身体长时间的保持健康,减少疾病的痛苦。人本电子健康系统意在为人们搭建一个平台,使其可以通过测量记录日常生活习惯、身体状况来管理自身的健康,并且通过专家系统的提示,调整不良生活习惯,保证身体处在良好的健康状态。在互联网进入到大数据时代的现在,单一的关系型数据库已经难以满足日益增长的数据存储规模和人们对海量数据处理方面的需求,而越来越多的非关系型数据库的涌现使数据存储的方式越来越多样化,其中基于key/value的数据库占了比较大的部分。

【关键词】key/value redis人本电子健康;web2.0

1.绪论

随着信息化技术及互联网技术的发展,我们的生活已经离不开它们,通过它们能够提高生活及工作效率,在这基础上,电子健康概念被提出,通过标准化软件、制度等,逐步搭建起全国健康服务和管理机构间跨地域、跨部门、跨所有制的电子信息共享网络,实现远程会诊医疗、远程教学等,可以使各级各类医疗保健、疾病预防、计划生育服务、医学科研、健康咨询和药品、医疗器械生产供应销售以及社会保障、保险等形成一体化医疗转诊和健康服务体系,最大限度的信息互通和资源共享。同时借助互联网和信息技术的发展,各个医院以及其他医疗卫生服务机构纷纷建设其如HIS(医院信息管理系统)、LIS(检验科信息管理系统)、PACS(图像信息管理系统)等信息化系统,提高了医院的信息化水平和业务处理水平,更好的为患者提供医疗卫生服务。但是对每个个体的人来讲,如何让他们时时刻刻都了解自己的健康状况,如何保持健康预防疾病,一旦生病后怎样在第一时间对病情有所了解采取有效的治疗方案,这是人们常常最关心的问题,而这些问题也是目前国内外研究关注的问题,让普通老百姓能够快速便捷的通过例如互联网等媒介获取健康及医疗资源信息才是解决公众健康问题的最有用的途径。

2.相关技术介绍

2.1 NoSQL数据存储介绍

NoSQL的发展最早可以追溯到1991年Key/Value类型的Hush数据库Berkeley DB的,它适用于数据类型相对简单但需要极高读写速度的场合。而NoSQL概念的提出则是从2009年年初开始,用来为现代互联网应用提供可扩展的数据库解决方案。对NoSQL一个较为全面的解释是“下一代的数据库产品应该具有这几个特点:非关系型的、分布式的、开源的、可以线性扩展的。”NoSQL的全称为Not Only SQL(不只SQL),从名字可以看出,它的提出并不是要取代关系型数据库在现代应用中的广泛使用,而是采用一种非关系型的方式来解决数据的存储和计算问题。

2.1.1 NoSQL与SQL

传统的关系型数据库难以适应如今Web2.0环境下某些特定场景的存储需求,如现今流行的具有超大规模和高并发的SNS(社交网络)类型的Web2.0纯动态网站。总结起来,传统关系型数据库如今面临的挑战主要有如下几点:

(1)对数据库高并发读写的需求

(2)对海量数据的高效存储和访问的需求

(3)对数据库的高扩展性和高可用性的需求

相比于关系型数据库,NoSQL数据库更加关注这些问题,相对于关系型数据库,NoSQL的主要优势在于:

(1)灵活的可扩展性

(2)海量数据处理,高性能

(3)灵活的数据模型

NoSQL的优势是显而易见的,然而相对于关系型数据库他也存在很明显的不足,主要体现在:

(1)NoSQL很难实现数据的完整性,很难在企业应用中普及。

(2)缺乏强有力的技术支持

(3)成熟度

4)在设计时候,关系型数据库相比NoSQL更能体现实际需求。

2.1.2 NoSQL在互联网中的应用

NoSQL数据库最早在互联网中的典型应用案例是Google的BigTable和Amazon的Dynamo,都是为了解决海量数据规模的的存储需要设计的,且两者都是以Key/Value的形式存储。其中Dynamo所存储的是非结构化数据,而BigTable存储的是结构化或半结构化的数据。

随着互联网进入到“大数据”时代,出现了很多开源的NoSQL产品,如基于Key/Value的Memcached、Tokyo Cabinet、Redis等,基于列的HBase、Cassandra等,基于文档的MongoDB、CouchDB等。国内各大互联网公司也纷纷推出他们各自的NoSQL产品,豆瓣的BeansDB、人人网的Nubar等。

2.2 Redis数据库介绍

Redis(Remote Dictionary Server)是一个使用ANSI C语言开发的开源的Key-Value存储系统,其作者是意大利人Salvatore Sanf-ilippo,代码量大约是1万多行,目前Redis的主要开发工作由VMware公司主持。它和目前较流行的Memcached类似,都是基于内存(缓存)的数据存储方式,不同的是Redis支持的数据类型更加丰富并且对每种数据机构提供了丰富的操作,其支持的数据类型包括:String(字符串)、List(列表)、Hash(哈希)、Set(集合)、ZSet(有序集合)。同时Redis不同于Memcached的在于它会将更新的数据异步的持久化到硬盘中或者把进行过的修改操作写入日志文件中。

Redis虽然是Key/Value形式的数据库,但是它吸收了部分关系型数据库的优点,如在能保存Lists和Sets类型的数据的同时,还能完成排序等高级功能,同时在实现INCR(自增)、SETNX(若不存在key则创建并设值)等功能时保证其操作的原子性。在此基础上还实现了master-slave(主从)同步。

3.系统设计与实现

3.1 系统整体架构

人本电子健康系统的总体架构采用基于MVC模式的轻量级的CodiIgniter框架,整个系统分为展示层、中间层和数据层。其中展示层负责将用户个性化信息呈现给用户,并接收用户请求提交给中间层,再中间层与数据层进行交互,中间层经过业务逻辑处理后再通过控制器将用户请求的数据返回给展示层。

前端展示层由PHP页面组成,它负责为用户展示系统及用户个性化信息,同时接收用户操作请求,并以HTTP请求的形式发送给服务器。

中间层是整个系统的核心部分,它由控制器(controller)、业务逻辑层和数据模型(Model)层组成。控制器负责接收前端展示层发送的HTTP请求,并将请求分发给相应的业务逻辑单元进行处理,业务逻辑单元根据需要会通过数据模型层和数据层进行交互,将运算结果返回给控制器,最终由控制器返回给前端展示层。

数据层是整个系统使用的数据库系统,用于存储支撑整个系统的信息,如用户资料、知识库等数据。在人本电子健康系统中数据层由MySQL数据库和Redis共同组成。

人本电子健康系统的总体架构如图3.1所示。

3.2 健康微博模块设计与实现

健康微博功能括健康微博的发表、查看、转发、回复和收藏等子功能。其中健康微博可发表普通文本类型的、图片类型、视频类型和链接。

健康微博是存储于Redis中的,因为健康微博的查询是需要对用户和时间进行筛选的,比如获取已关注用户在某一时间后的内容,这样的需求在关系型数据库中很容易实现,然而在Key/Value系统中没有像SQL查询中强大的筛选能力,因此就需要充分利用Redis中的数据结构和对key的良好设计。根据需求,系统中进行的较多的查询为对用户某一时间段的内容的筛选,因此健康微博内容将以Hash的格式存入Redis中,Key的格式为mbs:时间的时间戳,例如mbs:1337073948216,该Key在Redis中是唯一存在的。

3.3 健康记录模块设计与实现

3.3.1 健康信息记录功能

健康信息记录功能的结构化数据分别存于MySQL中的体征信息表(body_info)、血压信息表(pressure_info)、睡眠信息表(sleep_info)、围度信息表(circle_info)、和运动信息表(sports_info)中,它们记录的数据说明如下。

body_info:存储用户记录的身体状态信息,包括身高、体重、体温、脂肪率信息。

pressure_info:存储用户记录的血压信息,其指标包括高压(Kpa)、低压(Kpa)、脉搏。

sleep_info:存储用户记录的睡眠信息,包括入睡和起床时间。

circle_info:存储用户记录的身体各个围度的信息,单位为cm。

sports_info:存储用户记录的运动量信息,包括跑步里程(km)、俯卧撑个数、仰卧起坐个数、其他运动项目持续时间。

3.3.2 健康信息展示

健康信息在系统中主要通过两个方式展现给用户,分别是健康日程和健康统计两个子功能。健康日程,将用户的健康记录历史以日历的形式展现在前端页面,同时具有健康记录追加和计划功能。健康统计,通过前端页面中嵌入flash插件来实现将用户一个月内的健康记录状况线性表示出来。

健康统计功能在网页中展示了用户记录的各个数据在一个月内的走势情况。走势图通过调用Open Flash Chart组件在网页中嵌入flash插件来实现。从后台获取到数据后由flash插件在前端显示,依赖的源文件包括:

/js/char.js

/js/swfobject.js

/flash/flash-chart.swf

3.4 健康日志模块设计与实现

健康日志能让用户记录包括检查/治疗记录、健康日志、病史和治疗成功案例三种资料。其中健康日志、病史和成功案例为非结构化数据,存储于健康日志表health_log中,而检查/治疗记录存储的为半结构化数据,存储于健康检查表health_check中。其设计如表3.1和表3.2所示。

在健康日志的实现方面,考虑到用户的修改不是很频繁,为了降低服务器的压力,采用了页面静态化的技术。

3.5 心理健康模块设计与实现

心理健康模块通过将心理测试题目推荐给用户,题目均为选择题,用户通过选择题目选项获得对个人心理状况的客观评估。心理健康模块题目及相关数据在数据库中存储由心理测试信息(psytest_info)、题目信息(psytest_sub)、题目选项信息(psytest_option)、评分标准信息(psytest_score)、答题临时信息(psytest_temp)、测试历史信息(psytest_history)六个数据表组成,它们存储的信息分别为:

psytest_info:心理测试题项目信息,包括测试标题、测试描述等。

psytest_sub:心理测试项目中各个题目信息。

psytest_option:心理测试题目中各个选项信息。

psytest_score:心理测试项目评分标准信息。

psytest_temp:用户测试过程信息。

psytest_history:用户心理测试历史信息。

其实体-关系如图3.2所示。

心理测试模块在服务器端主要由testCon-troller和testModel两个类来实现,testCont-roller负责接收前端发送的请求,而testModel则主要实现流程的处理。

4.结束语

人本电子健康是目前较新的一个概念,其系统也是在比较小的范围内进行测试和应用,在今后的工作中,仍然有以下几个方面有待进一步研究:

(1)应用3G和传感技术,对用户的健康进行进一步的更加全面的监控,如用户可随身携带的腕表时时检测并将数据传回服务器,或者在用户的居住或工作场所设立环境传感器替用户检测如空气质量等的生活环境,并且通过服务器计算将用户的疑似健康问题进行提醒。

(2)因为目前移动互联网正在迅速发展,手机平台是人们上网办公等的主要平台,因此将人本电子健康系统移植到各个移动平台如iOS、Android、Windows Phone是人本电子健康系统下一步研究的目标。

(3)对于健康记录功能,用户希望更多的是更加方便快捷的输入方式,通过能够连接电脑的家庭医疗终端如电子血压计、血糖仪等终端,在用户测量完毕之后直接记录到后台数据库中,免去用户输入的步骤。

(4)通过改进推荐算法,采用更加高性能,更加有效的推荐算法,给用户推送更加全面的健康信息是人本电子健康系统下一步研究面临的最实际的需求。

(5)全面利用HTML5+CSS3技术对页面进行优化,提高页面的兼容性和性能,同时优化交互方式,进一步提高用户体验。

随着互联网技术的不断发展,尤其是云计算的迅猛发展,目前很多亟待解决的问题在将来都会得到有效的解决。然而,解决旧问题的同时,一定会伴随着新问题的产生,因此对于人本电子健康的研究,仍然需要我们不断的探索,不断的研究。相信在将来,展望中提到的前景一定会全部实现。

参考文献

[1]达科特(Jon Duckett).Web编程入门经典:HTML、XHTML和CSS(第2版)[M].清华大学出版社,2010:01.

[2]尼古拉斯·泽卡斯(Nicholas C.Zakas).JavaScript高级程序设计(第2版)[M].人民邮电出版社,2010:07.

[3]扎卡斯(Nicholas C.Zakas).Ajax高级程序设计(第2版)[M].人民邮电出版社,2008:07.

[4]阿蒂雅(Hagit Attiya),骆志刚.国外计算机科学教材系列·分布式计算(第2版)[M].电子工业出版社,2008:04.

[5]Bear Bibeault.jQuery实战[M].人民邮电出版社,2009:02.

[6]黄贤立.NoSQL非关系型数据库的发展及应用初探[J].福建电脑,2010,07(25).

[7]西尔伯沙茨.数据库系统概念(原书第5版)[M].机械工业出版社,2009-02.

[8]robbin.NoSQL数据库探讨之——为什么要用非关系数据库[EB/OL].http:///blog/524977, 2009,11(25).

[9]张荔子,谭嘉.电子健康系统让医患信息对称[J].健康报,2005,08:20-25.

作者简介:田涛(1986—),硕士研究生,主要研究方向:智慧城市、医疗领域。