亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Node.js對(duì)多種數(shù)據(jù)庫協(xié)同訪問實(shí)踐
        ——以圖書館短信服務(wù)系統(tǒng)為例

        2019-08-02 02:53:04劉紅衛(wèi)
        天津科技 2019年7期
        關(guān)鍵詞:代碼短信數(shù)據(jù)庫

        劉紅衛(wèi)

        (泰達(dá)圖書館檔案館 天津300457)

        0 引 言

        數(shù)據(jù)庫幾乎是信息管理系統(tǒng)開發(fā)中的標(biāo)配。數(shù)據(jù)庫的應(yīng)用,使得數(shù)據(jù)的管理井井有條,數(shù)據(jù)的利用也非常方便。在一個(gè)信息系統(tǒng)中一般都是訪問一個(gè)數(shù)據(jù)庫,但也有一些特殊的系統(tǒng),尤其是在原有多個(gè)信息系統(tǒng)上建立整合的應(yīng)用系統(tǒng),往往要對(duì)多種類型數(shù)據(jù)庫進(jìn)行訪問,以便對(duì)那些分散在異構(gòu)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行協(xié)同訪問,然后再將數(shù)據(jù)重新整合進(jìn)行利用。

        1 圖書館短信服務(wù)系統(tǒng)

        隨著信息技術(shù)的進(jìn)步,移動(dòng)互聯(lián)網(wǎng)普遍應(yīng)用,短信已經(jīng)不是人們之間通訊的主要手段,但是短信以其隨身性和及時(shí)性,依然是當(dāng)今作為推送服務(wù)信息不可或缺的方式。

        筆者所在的圖書館自 2007年開始,應(yīng)用短信系統(tǒng)開展圖書館服務(wù),至今已有十多年的時(shí)間,舊的短信平臺(tái)系統(tǒng)是一臺(tái)中國(guó)移動(dòng)定制的硬件設(shè)備,配合短信貓的使用才能做到全網(wǎng)短信的發(fā)送,短信的業(yè)務(wù)邏輯實(shí)現(xiàn)也是在這臺(tái)設(shè)備上配置的。

        2018年中國(guó)移動(dòng)公司將短信平臺(tái)升級(jí)為云端方式,稱為云 MAS平臺(tái)。為了繼續(xù)保持短信服務(wù)的開展,我們考察云 MAS平臺(tái)的功能,發(fā)現(xiàn)其只提供了普通短信的發(fā)送功能,用戶通過瀏覽器直接登錄云 MAS平臺(tái),通過操作頁面的方式進(jìn)行短信發(fā)送,沒有提供像舊版本那樣,能與本單位系統(tǒng)相結(jié)合來定義的業(yè)務(wù)短信的配置功能,但是提供了HTTP、SDK、CMPP等方式的短信網(wǎng)關(guān)接口[1],需要自行編寫程序、開發(fā)系統(tǒng)。新的短信服務(wù)系統(tǒng)的相關(guān)數(shù)據(jù)庫和網(wǎng)絡(luò)拓?fù)淙鐖D1所示。

        圖1 數(shù)據(jù)庫訪問和網(wǎng)絡(luò)拓?fù)鋱DFig.1 Database access and network topology diagrams

        在圖 1中,LAS服務(wù)器上運(yùn)行著圖書館核心管理系統(tǒng),讀者借閱和圖書單冊(cè)信息存儲(chǔ)在 Oracle數(shù)據(jù)庫中。eCard服務(wù)器上運(yùn)行的是讀者證卡管理系統(tǒng),為了避免讀者接收到無關(guān)的服務(wù)短信,讀者可以自己定制所需要的短信類型,此項(xiàng)功能包括在 eCard系統(tǒng)中,讀者信息(包括手機(jī)號(hào)碼)、讀者定制服務(wù)信息和消費(fèi)信息存儲(chǔ)在 DB2數(shù)據(jù)庫中。短信服務(wù)器上運(yùn)行短信服務(wù)管理系統(tǒng),也就是需要開發(fā)的系統(tǒng),需要發(fā)送的服務(wù)短信內(nèi)容存放在本機(jī)的 Mysql數(shù)據(jù)庫中(在舊系統(tǒng)中有定制服務(wù)短信內(nèi)容的Web系統(tǒng),后臺(tái)是 MySql數(shù)據(jù)庫,這部分沿用,無需重新開發(fā),如此也可以縮短新系統(tǒng)的開發(fā)時(shí)間)。對(duì)于讀者手機(jī)號(hào)及所借圖書的到期情況等信息,需要從 LAS的Oracle數(shù)據(jù)庫和 eCard的 DB2數(shù)據(jù)庫中提取,然后將數(shù)據(jù)組裝成一條短信內(nèi)容,通過中國(guó)移動(dòng)(CMCC)短信網(wǎng)關(guān)提供的HTTP接口發(fā)送出去,最后將相關(guān)發(fā)送情況進(jìn)行登記。

        圖書館短信服務(wù)系統(tǒng),涉及的服務(wù)短信的類型如圖2所示。

        圖2 服務(wù)短信類型Fig.2 Type of SMS service

        上行短信是讀者發(fā)給系統(tǒng)的,由 CMCC網(wǎng)關(guān)接收轉(zhuǎn)發(fā)到系統(tǒng),系統(tǒng)接收分析后按要求提取信息再反饋給讀者。下行短信由系統(tǒng)按照讀者的定制情況直接發(fā)給讀者。另外,短信的發(fā)送有 2種情況,一對(duì)多是同樣的短信內(nèi)容發(fā)給多個(gè)讀者,一對(duì)一是對(duì)不同的讀者發(fā)送不同的短信內(nèi)容。上行短信的反饋信息都是一對(duì)一形式。

        目前,Node.js憑借其優(yōu)秀的性能受到全球各大公司的重視,如 eBay、Microsoft、PayPal、Uber、Yahoo等,國(guó)內(nèi)阿里巴巴、百度、騰訊等也在很多的項(xiàng)目中應(yīng)用,可見 Node.js的發(fā)展已經(jīng)很成熟,它能快速創(chuàng)建大規(guī)模的網(wǎng)絡(luò)應(yīng)用,處理高吞吐量的實(shí)時(shí)連接。Node.js有 Windows、Linux、macOS、SunOS、AIX等系統(tǒng)平臺(tái)版本,因而具有良好的跨平臺(tái)可移植性,可以在 Windows上開發(fā),然后部署到 Linux等其他系統(tǒng)上[2]。

        短信服務(wù)系統(tǒng)的服務(wù)器,采用的操作系統(tǒng)是CentOS 6.10版,綜合以往基于 Linux系統(tǒng)的開發(fā)經(jīng)驗(yàn),以及 Node.js對(duì) Mysql、Oracle、DB2數(shù)據(jù)庫系統(tǒng)的強(qiáng)大支持和良好的性能,我們最終采用 Node.js進(jìn)行短信服務(wù)系統(tǒng)的開發(fā)工作。

        2 數(shù)據(jù)庫的訪問

        Node.js是通過數(shù)據(jù)庫訪問模塊實(shí)現(xiàn)對(duì)數(shù)據(jù)庫訪問的,訪問不同類型的數(shù)據(jù)庫需要加載不同的模塊,這些模塊的使用過程包括安裝、連接配置和訪問操作。

        2.1 模塊的安裝

        在短信服務(wù)系統(tǒng)中涉及的數(shù)據(jù)庫類型有 Mysql、Oracle和 DB2。Node.js訪問數(shù)據(jù)庫的模塊可以在npmjs.com搜尋,這里有廠商官方提供的以及個(gè)人編寫的很多模塊,良莠不齊,具體采用哪個(gè)需要甄別。我們根據(jù)模塊的使用量和使用效果選擇了 mysql、ibm_db、oracledb這3個(gè)模塊。

        mysql模塊的安裝比較簡(jiǎn)單,只需使用命令 npm install mysql安裝即可。而 oracledb、ibm_db這 2個(gè)模塊,首先需要根據(jù)操作系統(tǒng)下載并安裝驅(qū)動(dòng)程序,然后再進(jìn)行編譯和安裝。下面將安裝過程中需要注意的問題進(jìn)行總結(jié)。

        2.1.1 ibm_db模塊

        選擇 Node.js 8.12版。首先,安裝 gcc和 gccc++(即g++,在CentOS中稱為gcc-c++),安裝后gcc版本如果是 4.7,需要升級(jí)到 4.8,再安裝 devtoolset-2-gcc、devtoolset-2-binutils、devtoolset-2-gcc-c++ 3 個(gè)軟件包,它們會(huì)被安裝在/opt/rh/devtoolset-2/root/中,要注意在/usr/bin中建立它們的軟連接,以便使用。

        然后,安裝DB2客戶端程序,在/app文件夾中釋放linuxx64_odbc_cli.tar.gz,再在/etc/profile文件中增加以下環(huán)境變量。

        export LD_LIBRARY_PATH=/app/clidriver/lib:$LD_LIBRARY_PATH

        最后是安裝 ibm_db。使用命令 npm install ibm_db并注意此時(shí)在系統(tǒng)環(huán)境中不能有IBM_DB_HOME變量定義,否則無法安裝,如果變量已經(jīng)定義,則用 export n IBM_DB_HOME命令去掉。當(dāng)安裝過程提示訪問權(quán)限問題時(shí),使用下面的命令:

        npm install --unsafe-perm=true --allow-root ibm_db

        命令執(zhí)行完成后,進(jìn)入 node_modules/ibm_db目錄中,首先需要定義變量 export IBM_DB_HOME=/app/clidriver,然后執(zhí)行以下命令:

        node-gyp configure build --IBM_DB_HOME=$IBM_DB_HOME --IS_DOWNLOADED=false -verbose[3]

        在編譯過程可能會(huì)有警告出現(xiàn),不用理會(huì),只要執(zhí)行過程中沒有報(bào)錯(cuò)就說明安裝成功了。

        2.1.2 oracledb模塊

        首先,安裝 oracle instant client,12.2.0.1.0 版,可到 oracle官網(wǎng)下載 instantclient-basic-linux.x64-12.2.0.1.0.zip文件,解壓縮到指定目錄。

        然后,把下面的內(nèi)容寫入環(huán)境變量文件/etc/profile中:

        export ORACLE_HOME=/app/instantclient_12_2

        export PATH=$ORACLE_HOME:$PATH

        export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

        export TNS_ADMIN=$ORACLE_HOME/tns

        最后,安裝 oracledb 模塊,運(yùn)行命令npm install oracledb[4],如果出現(xiàn)訪問權(quán)限問題,則使用下面的命令安裝:

        npm install --unsafe-perm=true --allow-root oracledb

        2.2 連接方式

        首先,引入模塊并定義數(shù)據(jù)庫連接參數(shù),再建立數(shù)據(jù)庫的鏈接,然后執(zhí)行 sql查詢語句并獲取數(shù)據(jù),最后關(guān)閉連接。下面是使用mysql模塊獲取預(yù)設(shè)的短信內(nèi)容的例子。

        下面代碼是執(zhí)行查詢語句并獲取數(shù)據(jù)。

        其他數(shù)據(jù)庫訪問模塊的使用方法大同小異,只是一些代碼細(xì)節(jié)有所不同,如 oracledb中使用connection.execute語句來執(zhí)行 sql查詢語句獲取數(shù)據(jù),具體使用方法還需仔細(xì)閱讀相關(guān)文檔。

        3 數(shù)據(jù)庫連接池

        數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個(gè);釋放空閑時(shí)間超過最大空閑時(shí)間的數(shù)據(jù)庫連接來避免因?yàn)闆]有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。這項(xiàng)技術(shù)能明顯提高對(duì)數(shù)據(jù)庫操作的性能[5]。

        在 Node.js中可以方便地使用數(shù)據(jù)庫連接池技術(shù),以oracle為例,在oracledb中連接池的最大連接數(shù)poolMax缺省是4,通過代碼可以設(shè)置。

        var oracledb=require('oracledb');oracledb.pool Max=10;

        下面一段代碼是短信服務(wù)系統(tǒng)中完整的應(yīng)用oralcedb連接池的例子。義數(shù)據(jù)庫連接池的名字

        使用數(shù)據(jù)庫連接池技術(shù),并發(fā)執(zhí)行數(shù)量越大時(shí)比普通連接方式越有明顯的優(yōu)勢(shì),程序執(zhí)行效率高,支持的最大并發(fā)執(zhí)行數(shù)也會(huì)遠(yuǎn)超普通連接。

        4 數(shù)據(jù)庫的異步操作

        Node.js的異步處理是其精華所在,可以有效地利用資源,提高系統(tǒng)的性能,更好地改善用戶的體驗(yàn),同樣會(huì)提高對(duì)多種數(shù)據(jù)庫協(xié)同訪問的效率,但也使編程的難度提高了很多。傳統(tǒng)的 Node.js在處理異步問題時(shí),一般采用callback回調(diào)的方式,callback回調(diào)存在一個(gè)很嚴(yán)重的金字塔問題——大量的回調(diào)函數(shù)慢慢向右側(cè)屏幕延伸的一種狀態(tài)[6]?;卣{(diào)函數(shù)嵌套過多,可讀性極差,容易出錯(cuò),形成“回調(diào)地獄”。

        Promise為 Javascript中的改進(jìn)鋪平了道路。EcmaScript 2017以 async和 await語句的形式,在JavaScript的 Promise之上引入了語法糖。它們?cè)试S編寫基于 Promise的代碼,就好像它是同步的,但不會(huì)阻塞主線程[7]。

        在Node.js版本8中已經(jīng)支持async和await語法。async函數(shù)返回一個(gè)Promise對(duì)象,當(dāng)函數(shù)執(zhí)行的時(shí)候,一旦遇到 await就會(huì)先等待,等到異步操作完成,再接著執(zhí)行函數(shù)體內(nèi)后面的語句。這樣就將異步的代碼寫成同步的形式,代碼容易理解,可讀性大為提高,減少代碼錯(cuò)誤的產(chǎn)生,避免了“回調(diào)地獄”發(fā)生。下段代碼是發(fā)送“年檢提醒”訪問數(shù)據(jù)庫的程序,從中可見一斑。

        5 結(jié) 語

        圖書館短信服務(wù)系統(tǒng)從2018年10月上線至今,系統(tǒng)運(yùn)行穩(wěn)定,處理速度快。這說明 Node.js應(yīng)用于多種異構(gòu)數(shù)據(jù)庫的協(xié)同訪問,效果良好,異步和并發(fā)的性能優(yōu)異、穩(wěn)定可靠,是一個(gè)值得采用和深入研究的方案。

        Node.js自身哲學(xué)是花最小的硬件成本,追求更高的并發(fā),更高的處理性能[8]。Node.js使用的是JavaScript語言,相對(duì)學(xué)習(xí)成本較低、模塊化的開發(fā)模式,可以利用的資源豐富,現(xiàn)在已經(jīng)形成了完整的資源生態(tài),而且社區(qū)發(fā)達(dá),許多人把問題都放到社區(qū)交流討論,可以幫助縮短開發(fā)周期。另外,開發(fā)中所用的操作系統(tǒng)、工具、模塊大都是免費(fèi)的,運(yùn)行時(shí)系統(tǒng)對(duì)硬件資源的消耗相對(duì)于其他流行語言如 Java要小,這也降低了開發(fā)成本。

        Node.js經(jīng)歷了10年的發(fā)展歷程,今后一定會(huì)更加完善,它的使用范圍有待我們進(jìn)一步探索。

        猜你喜歡
        代碼短信數(shù)據(jù)庫
        道歉短信
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        代發(fā)短信
        數(shù)據(jù)庫
        數(shù)據(jù)庫
        數(shù)據(jù)庫
        數(shù)據(jù)庫
        午夜视频在线在免费| 国产亚洲欧美另类第一页| 久久国产精品免费专区| 亚洲视频精品一区二区三区| 国内精品国产三级国产avx| 日本女u久久精品视频| 国产一区二区三区视频在线观看| 国产精品一区二区三区专区| 国产a√无码专区亚洲av| 免费无码又黄又爽又刺激| 曰本极品少妇videossexhd| 91免费在线| 啪啪网站免费观看| 黄网站a毛片免费观看久久| 91九色人妻精品一区二区三区| 精品国产偷窥一区二区| 国产精品一区二区在线观看| 99er视频| 高潮社区51视频在线观看| 久久夜色精品国产亚洲av老牛| 在线观看亚洲第一黄片| 美女高潮黄又色高清视频免费| 撕开奶罩揉吮奶头视频| 免费人成再在线观看网站| 欧美日韩精品一区二区三区高清视频 | 3d动漫精品啪啪一区二区免费| 99久久久国产精品免费蜜臀| 亚洲国产综合精品 在线 一区| 2021国产成人精品国产| 国产精品nv在线观看| 国产成人精品一区二三区在线观看| 亚洲国产成人精品无码区在线播放| 日本高清视频xxxxx| 99亚洲精品久久久99| 日韩精品首页在线观看| 亚洲综合精品一区二区| 伊人久久这里只有精品| 亚洲色丰满少妇高潮18p| 国产午夜精品一区二区三区视频| 97激情在线视频五月天视频| 精品亚洲第一区二区三区|