熟妇人妻中文字幕在线视频_无码人妻精品视频_久久躁夜夜躁狠狠躁_偷碰人妻无码视频

現(xiàn)在位置:范文先生網(wǎng)>理工論文>計(jì)算機(jī)信息技術(shù)>分布式網(wǎng)絡(luò)系統(tǒng)中的數(shù)據(jù)訪問(wèn)設(shè)計(jì)與優(yōu)化

分布式網(wǎng)絡(luò)系統(tǒng)中的數(shù)據(jù)訪問(wèn)設(shè)計(jì)與優(yōu)化

時(shí)間:2023-02-21 00:10:51 計(jì)算機(jī)信息技術(shù) 我要投稿
  • 相關(guān)推薦

分布式網(wǎng)絡(luò)系統(tǒng)中的數(shù)據(jù)訪問(wèn)設(shè)計(jì)與優(yōu)化

分布式網(wǎng)絡(luò)系統(tǒng)中的數(shù)據(jù)訪問(wèn)設(shè)計(jì)與優(yōu)化*

張均東,任  光,陳 

(大連海事大學(xué) 輪機(jī)工程學(xué)院,遼寧大連  116026

 

  要:

在基于局域網(wǎng)的大型分布式仿真和控制系統(tǒng)中,包括數(shù)據(jù)庫(kù)服務(wù)器在內(nèi)的各計(jì)算機(jī)之間的信息交互方案的設(shè)計(jì)是系統(tǒng)性能優(yōu)異的關(guān)鍵,尤其是在計(jì)算機(jī)數(shù)量較多或待交互的單位時(shí)間信息量較大時(shí)更為重要。計(jì)算機(jī)間的信息交互涉及各機(jī)間的共享數(shù)據(jù)的讀取、存貯和更新等方面的內(nèi)容,需采取有效的系統(tǒng)規(guī)劃、實(shí)時(shí)通訊和快速數(shù)據(jù)庫(kù)訪問(wèn)等手段解決。本文全面論述了有關(guān)內(nèi)容,給出了有效的解決方案。

關(guān)鍵詞:網(wǎng)絡(luò)系統(tǒng)、 信息交互、優(yōu)化設(shè)計(jì)

前言

隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的不斷提高,使用基于局域網(wǎng)的,分布式的計(jì)算機(jī)系統(tǒng)對(duì)大型、綜合或復(fù)雜的工業(yè)過(guò)程和運(yùn)行環(huán)境進(jìn)行系統(tǒng)仿真與運(yùn)行模擬以及控制已越來(lái)越普遍。由于這樣的仿真與控制系統(tǒng)一般規(guī)模龐大或過(guò)程復(fù)雜,單獨(dú)一臺(tái)計(jì)算機(jī)無(wú)法完成整個(gè)系統(tǒng)任務(wù),需要多機(jī)參與,構(gòu)成計(jì)算機(jī)網(wǎng)絡(luò),通過(guò)網(wǎng)上信息交互共同協(xié)調(diào)完成整個(gè)仿真與控制任務(wù)。各機(jī)之間信息交互的方式、頻率和數(shù)量決定了整個(gè)網(wǎng)絡(luò)系統(tǒng)的綜合性能。由于在這樣的系統(tǒng)中,機(jī)間的信息交互一般都非常頻繁,各機(jī)都要面臨數(shù)據(jù)更新、系統(tǒng)運(yùn)行、結(jié)果存貯等過(guò)程的快速性問(wèn)題,因此有關(guān)的設(shè)計(jì)是非常重要和關(guān)鍵的。

系統(tǒng)規(guī)劃與設(shè)計(jì)

無(wú)論是仿真還是控制系統(tǒng),合理的系統(tǒng)和數(shù)據(jù)規(guī)劃至關(guān)重要。通過(guò)系統(tǒng)和數(shù)據(jù)規(guī)劃可以優(yōu)化系統(tǒng)設(shè)計(jì),解決各機(jī)任務(wù)均衡,資源充分利用等問(wèn)題,在兼顧可靠性、安全性和故障可診斷性的同時(shí)充分發(fā)揮系統(tǒng)的整體效率和性能,并容許具有一定的可擴(kuò)展性。

目前有許多分布式仿真和控制系統(tǒng)采用以數(shù)據(jù)庫(kù)為中心的設(shè)計(jì)方案。在這種設(shè)計(jì)方案中,網(wǎng)上的交互信息通過(guò)數(shù)據(jù)庫(kù)來(lái)進(jìn)行,首先由產(chǎn)生交互信息的機(jī)器存入數(shù)據(jù)庫(kù),然后由需要該交互信息的機(jī)器從數(shù)據(jù)庫(kù)中讀出來(lái)完成一個(gè)信息交互或更新過(guò)程。由于該信息交互通過(guò)一個(gè)中間環(huán)節(jié)即數(shù)據(jù)庫(kù)來(lái)進(jìn)行,因此在網(wǎng)上的計(jì)算機(jī)數(shù)量較多或程序要求的數(shù)據(jù)更新較多較快時(shí),易造成數(shù)據(jù)沖突和網(wǎng)絡(luò)堵塞,極易導(dǎo)致系統(tǒng)運(yùn)行遲緩或死機(jī),成為整個(gè)系統(tǒng)性能的瓶頸。

當(dāng)然以數(shù)據(jù)庫(kù)為中心的分布式仿真和控制系統(tǒng)也有其優(yōu)點(diǎn),其編程思路比較簡(jiǎn)單清晰,容易被人理解和掌握。對(duì)于網(wǎng)上信息交互量不多的系統(tǒng),可以采用以數(shù)據(jù)庫(kù)為中心的系統(tǒng),同時(shí)可以通過(guò)數(shù)據(jù)規(guī)劃合理地分配各計(jì)算機(jī)的任務(wù),使用一些編程技術(shù)來(lái)降低網(wǎng)上的信息流量,提高系統(tǒng)的性能。例如在程序中應(yīng)盡量使用全局變量創(chuàng)建公用數(shù)據(jù)庫(kù)連接,避免每次不必要的數(shù)據(jù)連接重建時(shí)間。

如果系統(tǒng)較大、網(wǎng)上信息交互量較多或?qū)ο到y(tǒng)實(shí)時(shí)性和可擴(kuò)展性要求較高時(shí),應(yīng)采用實(shí)時(shí)網(wǎng)絡(luò)數(shù)據(jù)通訊的設(shè)計(jì)方案。在以數(shù)據(jù)庫(kù)為中心的系統(tǒng)設(shè)計(jì)方案中,由于數(shù)據(jù)的變化首先要存入數(shù)據(jù)庫(kù),然后被其它程序訪問(wèn)才能刷新,經(jīng)歷了數(shù)據(jù)庫(kù)存取這一中間環(huán)節(jié)。如果網(wǎng)上有多個(gè)應(yīng)用程序都需要知道該數(shù)據(jù)的變化,則都必須通過(guò)數(shù)據(jù)庫(kù)訪問(wèn)才能更新。這樣就浪費(fèi)了許多網(wǎng)絡(luò)資源,容量造成瓶頸。在采用實(shí)時(shí)網(wǎng)絡(luò)數(shù)據(jù)通訊的設(shè)計(jì)方案中,通過(guò)網(wǎng)絡(luò)實(shí)時(shí)通訊來(lái)解決網(wǎng)上各機(jī)器間的數(shù)據(jù)交互與刷新問(wèn)題,其中對(duì)于多臺(tái)機(jī)器都需要的數(shù)據(jù)變化通過(guò)網(wǎng)絡(luò)廣播的方式,以定時(shí)和數(shù)據(jù)變化實(shí)時(shí)觸發(fā)傳送的機(jī)制向所需機(jī)器通知該數(shù)據(jù)已發(fā)生變化和具體的數(shù)值;對(duì)于只存在兩臺(tái)機(jī)器之間的信息交互可采用點(diǎn)對(duì)點(diǎn)的方式進(jìn)行通訊。通訊的數(shù)據(jù)格式和組織可以自行定義。因此,與以數(shù)據(jù)庫(kù)為中心的方案相比,該設(shè)計(jì)方案減少了因數(shù)據(jù)刷新所需的多次訪問(wèn)問(wèn)題,大大減少了數(shù)據(jù)流量,同時(shí)網(wǎng)絡(luò)傳輸還可以增加數(shù)據(jù)正確性和合法性校驗(yàn),為操作者或系統(tǒng)管理員及時(shí)提供系統(tǒng)信息和出錯(cuò)信息,便于系統(tǒng)故障診斷和系統(tǒng)調(diào)試。

如果把各子系統(tǒng)初始化數(shù)據(jù)都保存在服務(wù)器的數(shù)據(jù)庫(kù)中,則各機(jī)一起啟動(dòng)時(shí),由于都需要建立數(shù)據(jù)庫(kù)鏈接,讀取其中的初始化數(shù)據(jù),容易造成起動(dòng)時(shí)間過(guò)長(zhǎng)的現(xiàn)象。為此,對(duì)于不必要存于服務(wù)器的數(shù)據(jù)可存于本地?cái)?shù)據(jù)庫(kù)中,本地?cái)?shù)據(jù)庫(kù)可采用ACCESS數(shù)據(jù)庫(kù)。對(duì)于一般不變的系統(tǒng)初始化數(shù)據(jù)也可以備存到本地?cái)?shù)據(jù)庫(kù)中,供日常程序起動(dòng)時(shí)使用。如果系統(tǒng)的初始化數(shù)據(jù)進(jìn)行了更新,可以編制一段程序,根據(jù)數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)庫(kù)版本號(hào)來(lái)更新本地?cái)?shù)據(jù)庫(kù)。無(wú)論何種方案,數(shù)據(jù)庫(kù)的訪問(wèn)總是不能避免的,如何提高數(shù)據(jù)庫(kù)的訪問(wèn)速度非常值得研究。

提高數(shù)據(jù)庫(kù)訪問(wèn)速度(SQL數(shù)據(jù)庫(kù)為例)

客戶機(jī)程序一般采用VC++,VB

,PowerBuilderDelphi等支持訪問(wèn)數(shù)據(jù)庫(kù)的集成開(kāi)發(fā)環(huán)境進(jìn)行開(kāi)發(fā)。在編寫(xiě)客戶端程序時(shí),一般通過(guò)ODBC(Open Database Connectibvity) API,RDO(Remote Data Objects) [5],ADO(ActiveX Data Objects) [5]訪問(wèn)數(shù)據(jù)庫(kù),查詢或修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。其中ODBC API是被人們廣泛接受的用于數(shù)據(jù)庫(kù)訪問(wèn)的應(yīng)用程序編程接口。具有訪問(wèn)數(shù)據(jù)庫(kù)速度快效率高,但編程復(fù)雜的特點(diǎn);遠(yuǎn)程數(shù)據(jù)對(duì)象(RDO)對(duì)ODBC API函數(shù)進(jìn)行了封裝,為編程人員提供了一個(gè)訪問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù)的高級(jí)接口,在程序中通過(guò)該對(duì)象可輕松對(duì)數(shù)據(jù)庫(kù)進(jìn)行遠(yuǎn)程訪問(wèn)。組件對(duì)象(ADO)不僅繼承而且發(fā)展了RDO,它不但具有訪問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù)的能力,而且還具有訪問(wèn)其它數(shù)據(jù)提供者(不一定是數(shù)據(jù)庫(kù),可能是其他文件或其他應(yīng)用程序所提供的數(shù)據(jù))的能力。在VB中可很方便的使用RDO

ADO
來(lái)訪問(wèn)數(shù)據(jù)庫(kù),但訪問(wèn)數(shù)據(jù)庫(kù)效率不高,速度較慢,靈活性也差。為了滿足系統(tǒng)的要求經(jīng)常需要提高訪問(wèn)數(shù)據(jù)庫(kù)的速度,具體方法有:

3.1  使用ODBC API函數(shù)

由于ODBC API函數(shù)的入口參數(shù)表中有些參數(shù)需要傳遞指針,而VB不支持指針,因此在VB中調(diào)用ODBC API函數(shù)會(huì)有一定的限制。另外,VB的字符串內(nèi)存存儲(chǔ)格式與C語(yǔ)言不同,而ODBC API函數(shù)是用C語(yǔ)言開(kāi)發(fā)的,這也限制了VBODBC API

函數(shù)之間的數(shù)據(jù)交換。為此需要開(kāi)發(fā)一個(gè)動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Library - DLL),編制二個(gè)API函數(shù)分別以獲取參數(shù)指針和支持?jǐn)?shù)據(jù)交換,從而實(shí)現(xiàn)在該動(dòng)態(tài)鏈接庫(kù)的支持下,在VB中直接調(diào)用ODBC API函數(shù)的目的。

可以使用VC++6.0開(kāi)發(fā)動(dòng)態(tài)鏈接庫(kù)。VC++6.0可開(kāi)發(fā)三種類型的動(dòng)態(tài)鏈接庫(kù):Win32 DLL、常規(guī) MFC DLL、擴(kuò)展 MFC DLL。其中Win32 DLL、常規(guī) MFC DLL可被任意Win32編程環(huán)境(包括Visual Basic 6.0

)加載使用。常規(guī) MFC DLL在發(fā)行時(shí)必須附帶MFC42.DLL庫(kù),而Win32 DLL可單獨(dú)發(fā)行[3]。如果只提供給VB編程環(huán)境使用,可建立Win32 DLL即可。

具體的開(kāi)發(fā)步驟為:利用VC++6.0編程環(huán)境的AppWizard創(chuàng)建一個(gè)簡(jiǎn)單Win32 DLL工程,工程名為SQLAPI,在此基礎(chǔ)上加入自己的代碼。代碼如下:

#include "stdafx.h"

#define DLLEXPORT

  extern "C" __declspec( dllexport) //定義導(dǎo)出宏

BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)

{  return TRUE;         }

DLLEXPORT long __stdcall GetAddress(void * Address) //按地址傳送

{  return (long) Address;       }//將地址強(qiáng)制轉(zhuǎn)換為長(zhǎng)整形

DLLEXPORT long __stdcall strCopyToByte (char * BytesAddress,char * strAddress)

{  return (long) strcpy(BytesAddress, strAddress); }//

將字符串傳送到指定地址

經(jīng)編譯鏈接生成SQLAPI.DLL動(dòng)態(tài)鏈接庫(kù),將其拷貝到C:\WINDOWS\SYSTEM(對(duì)于Windows C:\WINNT\SYSTEM32(對(duì)于Windows NT 2000)目錄下,這樣就可在VB中調(diào)用這兩個(gè)API函數(shù)實(shí)現(xiàn)對(duì)ODBC API的調(diào)用。ODBC調(diào)用的一般流程為:

1連接至數(shù)據(jù)源:分配環(huán)境句柄、設(shè)置環(huán)境屬性、分配聯(lián)接句柄、聯(lián)接數(shù)據(jù)源和設(shè)置聯(lián)接屬性。

2初始化應(yīng)用程序:分配語(yǔ)句句柄、設(shè)置語(yǔ)句屬性,必要時(shí)進(jìn)行數(shù)據(jù)綁定。

3建立和執(zhí)行SQL語(yǔ)句:a) 建立SQL語(yǔ)句,或使用硬編碼的SQL語(yǔ)句。b) 如果SQL語(yǔ)句含有參數(shù),將每個(gè)參數(shù)綁定至應(yīng)用程序變量。c) SQLExecDirect執(zhí)行該語(yǔ)句。如果語(yǔ)句要多次執(zhí)行,則進(jìn)行語(yǔ)句準(zhǔn)備,并用SQLExecute來(lái)執(zhí)行。

使用API函數(shù)可以加快數(shù)據(jù)庫(kù)的訪問(wèn),提高效率,另外也要注意SQL語(yǔ)句的語(yǔ)法優(yōu)化。對(duì)于巨表和多表訪問(wèn),SQL

【分布式網(wǎng)絡(luò)系統(tǒng)中的數(shù)據(jù)訪問(wèn)設(shè)計(jì)與優(yōu)化】相關(guān)文章:

生活中的數(shù)據(jù)教學(xué)設(shè)計(jì)08-16

GIS訪問(wèn)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)中若干技術(shù)問(wèn)題的探討08-06

ASP技術(shù)訪問(wèn)WEB數(shù)據(jù)庫(kù)08-06

ASP技術(shù)訪問(wèn)WEB數(shù)據(jù)庫(kù)08-06

基于ASP的Web數(shù)據(jù)庫(kù)訪問(wèn)08-06

基于PHP的Web數(shù)據(jù)庫(kù)訪問(wèn)08-06

ASP技術(shù)訪問(wèn)WEB數(shù)據(jù)庫(kù) 208-06

ASP技術(shù)訪問(wèn)Web數(shù)據(jù)庫(kù)的應(yīng)用08-06

VB訪問(wèn)數(shù)據(jù)庫(kù)的方法及接口的比較08-06