【摘 要】學(xué)生電子履歷建設(shè)對(duì)于學(xué)習(xí)實(shí)習(xí)、職業(yè)規(guī)劃、求職晉升等方面有著重要意義。通過分析現(xiàn)狀,從web網(wǎng)站分布式技術(shù)架構(gòu)中引入NoSQL數(shù)據(jù)庫,與關(guān)系型數(shù)據(jù)庫相結(jié)合,為結(jié)構(gòu)化信息、非結(jié)構(gòu)化數(shù)據(jù)的存取提供一個(gè)統(tǒng)一數(shù)據(jù)模型接口,便于應(yīng)用。
【關(guān)鍵詞】履歷 非結(jié)構(gòu)化數(shù)據(jù) NoSQL 統(tǒng)一數(shù)據(jù)模型
【中圖分類號(hào)】G 【文獻(xiàn)標(biāo)識(shí)碼】A
【文章編號(hào)】0450-9889(2014)10C-0187-03
構(gòu)建現(xiàn)代職業(yè)教育體系,推動(dòng)進(jìn)入終身教育社會(huì),其中學(xué)生履歷管理是保障條件之一。在學(xué)生經(jīng)歷普通教育、職業(yè)教育、繼續(xù)教育的過程中,會(huì)產(chǎn)生大量有價(jià)值的教育培訓(xùn)、職業(yè)經(jīng)歷、工作業(yè)績等信息,需要保存在履歷中,用于求學(xué)、實(shí)習(xí)、求職、晉升等證明。
履歷信息具有“碎片性”和“發(fā)展性”兩個(gè)基本特性。其中“碎片”是信息具有零碎、繁雜、多樣的橫向特性。履歷中使用類別項(xiàng)進(jìn)行分類,主要分為:個(gè)人信息,專業(yè)信息,課程成績,職業(yè)操行,培訓(xùn)認(rèn)證,獎(jiǎng)懲,實(shí)踐創(chuàng)新與其他?!鞍l(fā)展性”是指隨著學(xué)生成長成才,發(fā)展進(jìn)步,履歷信息會(huì)逐步變遷,級(jí)別晉升,證書升級(jí)等。過程性信息需要保留,方便統(tǒng)計(jì)職業(yè)發(fā)展軌跡,研究成才規(guī)律。
一、當(dāng)前研究現(xiàn)狀
目前對(duì)履歷信息管理研究集中在人力資源管理和檔案管理。如陳哲娟研究了履歷業(yè)績評(píng)價(jià)在領(lǐng)導(dǎo)干部選拔任用的作用、業(yè)績評(píng)價(jià)指標(biāo)等。劉大衛(wèi)論證履歷深度分析法在高管人員甄選中的作用,并指出其使用的局限性。田瑞強(qiáng)等從履歷研究的發(fā)展、數(shù)據(jù)源、分析方法及存在缺陷等方面進(jìn)行了闡述,同時(shí)指出了履歷研究的發(fā)展趨勢,從理論上對(duì)科技人員履歷及人才流失問題進(jìn)行了分析探討。同時(shí),履歷被引入產(chǎn)品管理范疇,對(duì)產(chǎn)品履歷的研究也逐步成為熱點(diǎn)。郝玲、陳勇等研究農(nóng)情履歷、現(xiàn)代信息采集手段在現(xiàn)代精準(zhǔn)農(nóng)業(yè)、農(nóng)業(yè)信息管理中的應(yīng)用。丁偉將電子履歷應(yīng)用于軍隊(duì)車輛裝備管理,提高了車輛裝備管理的效率和科學(xué)化水平。
現(xiàn)代履歷信息管理系統(tǒng)信息存儲(chǔ)環(huán)節(jié),經(jīng)歷了從紙質(zhì)履歷到Excel表格文檔,正逐步向關(guān)系型數(shù)據(jù)庫遷移的階段。在當(dāng)前工程實(shí)踐中,信息數(shù)據(jù)源主要有以下四種方式。
(一)文件系統(tǒng)方式
以文件格式作為數(shù)據(jù)源,管理傳感器采集設(shè)備上傳的非結(jié)構(gòu)化數(shù)據(jù),存放于服務(wù)器文件系統(tǒng)中。
優(yōu)點(diǎn)是存取速度快,操作方便。
缺點(diǎn)是隨著數(shù)據(jù)規(guī)??焖僭鲩L,目錄結(jié)構(gòu)混亂,難以管理;無法與應(yīng)用層權(quán)限管理協(xié)同使用,存在安全隱患;數(shù)據(jù)難于遷移。
(二)關(guān)系型數(shù)據(jù)庫方式
將非結(jié)構(gòu)數(shù)據(jù)直接存放到數(shù)據(jù)庫表的二進(jìn)制字段中。優(yōu)點(diǎn)是有較好的安全性,實(shí)現(xiàn)數(shù)據(jù)存取操作的一致性。缺點(diǎn)是數(shù)據(jù)庫IO是整個(gè)系統(tǒng)的性能瓶頸,使得數(shù)據(jù)表規(guī)??焖僭黾?,進(jìn)一步降低性能。
(三)專用商業(yè)數(shù)據(jù)庫
應(yīng)用范圍較窄,且代價(jià)昂貴。
(四)云計(jì)算平臺(tái)
公用云計(jì)算平臺(tái)提供了大數(shù)據(jù)解決方案,但由于行業(yè)特殊性,公有云的安全性還需要評(píng)估。
本文在文件、關(guān)系型數(shù)據(jù)庫基礎(chǔ)上,引入NoSQL數(shù)據(jù)庫,綜合使用三種數(shù)據(jù)源,提供一致的數(shù)據(jù)模型接口,實(shí)現(xiàn)結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)同步管理,按照時(shí)間標(biāo)簽階段性保存履歷更新,從而優(yōu)化履歷的管理,提高信息共享與復(fù)用。
研究農(nóng)情履歷超文本信息規(guī)范存儲(chǔ)管理的關(guān)鍵技術(shù),構(gòu)建一致的模型層,引入元數(shù)據(jù)、時(shí)間標(biāo)簽、NoSQL等技術(shù),構(gòu)建履歷信息的存儲(chǔ)系統(tǒng)原型。
二、系統(tǒng)設(shè)計(jì)
(一)系統(tǒng)功能設(shè)計(jì)
系統(tǒng)功能模塊:學(xué)生個(gè)人信息管理;教學(xué)培訓(xùn)信息管理,包括課程成績、考勤、培訓(xùn)認(rèn)證活動(dòng)管理;獎(jiǎng)懲信息管理;實(shí)習(xí)實(shí)踐活動(dòng)管理;信息檢索、排序、統(tǒng)計(jì)等。
(二)系統(tǒng)框架分析
系統(tǒng)按照MVC模式進(jìn)行分層設(shè)計(jì),系統(tǒng)構(gòu)架如圖1所示。具體功能如下:
1.視圖層——提供用戶UI,用于接收來自智能傳感器上傳的影像、圖片或其它非結(jié)構(gòu)化數(shù)據(jù),記錄傳感器節(jié)點(diǎn)信息,并標(biāo)記文件流的元數(shù)據(jù)。
2.控制器層——根據(jù)訪問路徑(如url)得到用戶請(qǐng)求意圖,處理請(qǐng)求,并調(diào)用Model層完成數(shù)據(jù)流的存儲(chǔ)或讀取。
3.Model層——根據(jù)Controller要求,完成具體的數(shù)據(jù)庫操作。
4.數(shù)據(jù)源系統(tǒng)——由關(guān)系型數(shù)據(jù)庫、非關(guān)系型數(shù)據(jù)庫及擴(kuò)展文件系統(tǒng)三部分組成。其中結(jié)構(gòu)化信息和非結(jié)構(gòu)化數(shù)據(jù)元信息存儲(chǔ)在關(guān)系型數(shù)據(jù)庫中,非結(jié)構(gòu)化數(shù)據(jù)存放到非關(guān)系型數(shù)據(jù)庫NoSQL及私有云計(jì)算平臺(tái)上。
5.控制采集中心——對(duì)系統(tǒng)進(jìn)行管理與維護(hù),能實(shí)時(shí)監(jiān)測系統(tǒng)的運(yùn)行狀態(tài),查看監(jiān)測對(duì)象的履歷信息,進(jìn)行分析與決策,并控制定時(shí)與隊(duì)列模塊運(yùn)行管理,及時(shí)更新數(shù)據(jù)信息。
圖1
(三)系統(tǒng)選型
表1 軟件選型
軟件名稱 作用
Ubuntu 服務(wù)器操作系統(tǒng)
Python 程序語言,用于原型開發(fā)
Flask Web微框架
MongoDB NoSQL數(shù)據(jù)庫
Pymongo python的MongoDB驅(qū)動(dòng)
Pygridfs Python的GridFS驅(qū)動(dòng)
Mysqldb Python的MySQL驅(qū)動(dòng)
SQLAlchemy Python的ORM套件
數(shù)據(jù)源綜合采用關(guān)系型數(shù)據(jù)庫、NoSQL數(shù)據(jù)庫及分布式文件系統(tǒng),用于存取、檢索學(xué)生電子履歷信息。為增加可靠性,降低成本,在軟件選型中,優(yōu)先選擇成熟、穩(wěn)定的開源軟件產(chǎn)品構(gòu)建。
MongoDB 作為NoSQL 開源數(shù)據(jù)庫的一種主流分布式數(shù)據(jù)庫,基于對(duì)象/文檔形式存儲(chǔ),提供BSON(Binary JSON) 數(shù)據(jù)結(jié)構(gòu)形式存儲(chǔ),有便利的查詢索引方式,提供分布式文件系統(tǒng)GridFS 來進(jìn)行存儲(chǔ)管理,使得定制信息變得靈活,擴(kuò)展數(shù)據(jù)變得高效。
三、關(guān)鍵原型實(shí)現(xiàn)
(一)履歷信息采集元數(shù)據(jù)字段約定
為便于生成索引,我們需要對(duì)文件命名進(jìn)行約定?!邦悇e”用兩位數(shù)字表示采集信息所屬的類別;“節(jié)點(diǎn)”是指個(gè)人、組織或機(jī)構(gòu),一般值為自己、院系辦公室、授予機(jī)構(gòu)等;“證明者”對(duì)于不同類別含義不同,如果是資格證,則表示授予單位,如果是校內(nèi)活動(dòng)證明等,則表示院內(nèi)機(jī)構(gòu)負(fù)責(zé)人;“審核者”是審核材料有效,允許上傳的院系、教學(xué)團(tuán)隊(duì)負(fù)責(zé)人;“當(dāng)前最新”是當(dāng)有多項(xiàng)同類材料中,時(shí)間最新或級(jí)別最高的材料為當(dāng)前,否則為歷史;“時(shí)間”是指材料獲取時(shí)間,為方便存儲(chǔ)、檢索需要,轉(zhuǎn)化為整型。調(diào)用程序語言的uuid()生成隨機(jī)唯一值,保留32bit。此外還有預(yù)留字段,用于保存不常用的信息屬性。
表2 采集信息元數(shù)據(jù)約定字段示例
其中,上表中各項(xiàng)值作為結(jié)構(gòu)化數(shù)據(jù),在數(shù)據(jù)采集上傳、協(xié)議解析后,按照協(xié)議生成元數(shù)據(jù),及時(shí)存入關(guān)系型數(shù)據(jù)庫MySQL數(shù)據(jù)表中。同時(shí)各項(xiàng)值用于生成非結(jié)構(gòu)化數(shù)據(jù)文件名。將其或ObjectId值更新到MySQL數(shù)據(jù)表的履歷表對(duì)應(yīng)字段中。從而完成結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)同時(shí)添加到數(shù)據(jù)源中。
(二)信息共享利用與導(dǎo)出歸檔
數(shù)字化信息需要及時(shí)歸檔。通過歸檔整理,把數(shù)據(jù)庫動(dòng)態(tài)數(shù)據(jù)轉(zhuǎn)化生成為靜態(tài)、只讀屬性的文件形式存放,供后續(xù)者查閱。由于網(wǎng)頁是超文本信息的天然組織者,因此優(yōu)先選擇靜態(tài)頁面方式歸檔信息,批量結(jié)構(gòu)化數(shù)據(jù)可以導(dǎo)出為Excel,政策文件、結(jié)果或結(jié)論性的信息按照模板格式生成PDF文檔。
(三)一致數(shù)據(jù)模型實(shí)現(xiàn)
SQLAlchemy是Python實(shí)現(xiàn)的數(shù)據(jù)隊(duì)形映射模型包,主要實(shí)現(xiàn)python對(duì)SQL數(shù)據(jù)庫的跨平臺(tái)操作?;赟QLAlchemy模型,使用pyMongo和mysqld驅(qū)動(dòng)程序,對(duì)農(nóng)情信息建立統(tǒng)一數(shù)據(jù)模型。而不是直接使用SQL與原生執(zhí)行命令對(duì)數(shù)據(jù)進(jìn)行管理。
限于篇幅,只給出GridFS上傳關(guān)鍵代碼示例:
// 導(dǎo)入必需的包
from sqlalchemy.ext.declarative
import declarative_base
from pymongo import Connection
from gridfs import *
#文件處理系統(tǒng)
class GFS:
#定義connection and fs
#初始化
def __init__(self):
#獲得單件對(duì)象
@staticmethod
def getInstance(): pass
Def put(self,name,**args):
try:
data= StringIO.StringIO()
image.save(data,format)
gf = GFS.fs.open(name,"w")
gf.content_type = "%s/%s" % (mime,format)
gf.write(data.getvalue())
finally:
Base = declarative_base()
class HypertextModel(Base):
// 使用SQLAlchemy聲明字段屬性
__tablename__ = 'picking'
id = Column(Integer, primary_key=True)
// 對(duì)照表2字段,依次聲明
//初始化方法,
def __init__(self, .....):
def write(data=[], params=[]):
dstfile = None
// 保存元素?fù)?jù)
// 確定文件名
for x in data:
dstfile = dstfile + “_”+x
Session.add(HypertextMode(data))
Params[0] = dstfile
// 將文件上傳到GridFS
GFS.put(params)
四、結(jié)果分析
經(jīng)驗(yàn)證,MongoDB在百萬條數(shù)據(jù),單條數(shù)據(jù)低于5K時(shí),性能低于純文件系統(tǒng)50%左右。當(dāng)單條數(shù)據(jù)逐漸增大時(shí),兩者差距逐漸減小。當(dāng)數(shù)據(jù)規(guī)模處于大尺寸,如高清圖片、視頻時(shí),MongoDB的性能穩(wěn)定,并可輕松擴(kuò)展成數(shù)據(jù)庫集群。
隨著新一代信息技術(shù)的發(fā)展,物聯(lián)網(wǎng)、云計(jì)算等技術(shù)在電子履歷各個(gè)環(huán)節(jié)中應(yīng)用日趨深入。學(xué)生電子履歷信息采集的數(shù)據(jù)具有橫向“碎片化”,縱向發(fā)展性等特征明顯,信息過載癥狀顯現(xiàn)。通過引入MongoDB和MySQL混合數(shù)據(jù)庫技術(shù),結(jié)合分布式文件系統(tǒng),構(gòu)建統(tǒng)一數(shù)據(jù)模型接口,充分利用兩者優(yōu)勢,實(shí)現(xiàn)了數(shù)據(jù)的有序、高效、安全地存儲(chǔ),有效降低成本,提高了項(xiàng)目效益。在后續(xù)的研究中,對(duì)數(shù)據(jù)格式、傳輸協(xié)議等規(guī)范,數(shù)據(jù)共享技術(shù)需進(jìn)一步的研究。
【參考文獻(xiàn)】
[1]陳哲娟. 履歷業(yè)績評(píng)價(jià)方法在領(lǐng)導(dǎo)干部競爭性選拔中的應(yīng)用[J].中國人力資源開發(fā),2012(3)
[2]田瑞強(qiáng),姚長青,袁軍鵬,等.基于科研履歷的科技人才流動(dòng)研究進(jìn)展[J].圖書與情報(bào),2013(5)
[3]徐棟.基于MongoDB的SaaS數(shù)據(jù)層多租戶關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[D].上海:華東理工大學(xué),2012
[4]潘凡. 從MySQL到MongoDB[J].程序員,2010 (6)
[5]王光磊. MongoDB數(shù)據(jù)庫的應(yīng)用研究和方案優(yōu)化[J].中國信息科技,2011(20)
【基金項(xiàng)目】2012年度廣西高等教育教學(xué)改革工程一般A類項(xiàng)目(2012JGA336)
【作者簡介】苗志鋒(1979- ),男,河北邯鄲人,碩士,廣西水利電力職業(yè)技術(shù)學(xué)院講師,研究方向:形式化方法,網(wǎng)絡(luò)分布式系統(tǒng),職業(yè)教育。