基于Java+MySQL實現(Web)文件共享管理系統(仿照百度文庫)

文件共享管理系統的設計與實現

摘要:本文件共享管理系統解決了用戶在搜索文件不需要下載文件到本地硬盤后才能查看文件的詳細內容的弊端;解決用戶在搜索關鍵字不明確條件下無法搜索到自己需要的文件弊端;解決了系統用戶并發量增加后服務器宕機而無法提供服務的弊端;解決服務器面對大量業務處理數據讀取速度過慢的弊端;解決用戶登錄密碼在 http 協議下被輕易竊取的弊端。

本文件共享管理系統,通過構建服務器集群和分布式數據庫集群來滿足互聯網用戶的并發訪問,提高用戶請求的響應時間;系統依賴于緩存服務器提高對數據的訪問速度;通過對用戶上傳文件的處理使得文件可以被用戶在線瀏覽;保證用戶文件的安全性采用單獨的服務器進行存儲;通過使用全文檢索框架對用戶輸入關鍵字智能分析。

本系統采用恰當的技術來解決上述問題從而為用戶提供良好的操作體驗。

關鍵字:全文檢索;安全;在線預覽;文件存儲

項目背景

隨著計算機技術的飛速發展,計算機應用的普及,計算機軟件系統對社會,經濟帶來越來越重要的影響,極大程度上提高了人們的工作效率。尤其近些年來,隨著互聯網 + 的提出,我國政府將互聯網作為當前信息化發展的核心特征并與工業,商業,金融等服務業全名融合。不僅提高了各行各業的服務質量和工作效率,而且降低了各行各業的不必要的成本開銷,這對促進整個社會的良性發展有著推動作用。

馬云說過計算機所處的時代正由 IT 轉向 DT 時代,現在的軟件系統已經不僅僅是為局部的幾十個人使用了,而是面對整個互聯網用戶提供服務,傳統的架構模式已經無法滿足時代的需要,如何設計一個良好的軟件架構面向整個互聯網用戶提供服務,這就是本系統的研發所在。

開發目的與意義

一個系統要想獲得用戶的青睞和高比例的留存率,能否為用戶提供滿意的服務是一個很重要的因素,本系統做到想用戶所想,在頁面上減少用戶對本系統的學習成本,高質量的響應用戶的搜索內容,使得用戶能夠搜索到符合自己滿意的文件減少用戶不必要的下載和流量消耗。互聯網系統必須保證用戶信息的安全性,如果不能給用戶安全感,這個系統就是一個失敗的項目,系統的開發目的就是有人愿意使用。傳統系統我們經常會遇到當有很多人和自己同時登陸系統操作時,自己的操作結果往往要等待幾分鐘才有響應,這樣的系統在設計上就已經是失敗的,一個好的系統必須在任何情況下都可以在用戶可以等待的范圍內及時響應。

本系統的開發就是對為了響應互聯網 + 的號召,對傳統系統的一次改變;保證用戶的信息的安全性,防止用戶的的個人信息在網絡傳輸中被人截取利用;保證用戶的響應都可以在合理的時間內進行響應;保證用戶能夠在下載文件前就充分知道文件內容是自己所需要的等。

系統開發工具與技術

本文件共享管理系統的開發工具使用 Eclipse,數據庫采用的是 MySQL,服務器采用 Tomcat6.0,Nginx。在開發中采用 Java 語言進行開發,項目整體使用 Struts2,hibernate,Spring 三大框架作為開發的基本環境,使用 Lucene 全文檢索框架進行文件的搜索,MyCat 中間件處理分布式數據庫和分布式事務問題等問題,OpenOfiice 技術對 office 文件轉換為 swf 文件時數據內容的提取,頁面采用 JSP+HTML+CSS+DIV 等技術,AJAX 進行請求的異步發送,Java Mail 技術對用戶賬號進行驗證,Memached 技術實現內存級緩存,同時在項目開發中使用 SVN 進行項目的版本控制。下面經對這些平臺和技術進行簡單的介紹。

MySQL 數據庫

MySQL 是一個采用了關系模型來組織數據的關系型數據庫,而且它的源代

碼是開放的,誰都可以在一定的條件下無償使用,而且可以對應用程序進行改造。它使用普及率廣泛;對數據的處理十分迅速;支持在多種 OS 中運行;支持多種開放語言。

Memcached 技術

Memcached 是一個性能很高的內存對象緩存系統,它通過在內存里維護一個統一的巨大的 hash 表,來存儲各種格式的數據,包括圖像、音頻以及數據庫檢索的結果等。簡單的說 Memcached 就是將數據調用到內存中存儲起來,然后需要對應數據時從內存中讀取而不是從硬盤中讀取,從而大大提高讀取速度。

Memcached 以守護程序的方式可以運行在一個或多個服務器上,隨時接收客戶端的連接和操作。

Lucene 技術

Lucene 是一個開放源代碼的全文檢索引擎框架,它提供了完整的查詢引擎和索引引擎,部分文本分析引擎。全文檢索是計算機程序通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置。當用戶查詢時根據建立的索引查找,類似于通過字典的檢索字表查字的過程.

Nginx 技術

Nginx 是一個高性能的 HTTP 和反向代理的服務器,反向代理方式是指以代理服務器來接受 internet 上的連接請求,然后代理服務器將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給 internet 上請求連接的客戶端,此時代理服務器對外部網絡的客戶端而言像為一個服務器。

Servlet 技術

servlet 是一個用 Java 編寫的服務器端程序。servlet 運行在 Java 服務器上。Java servlet 可以動態的擴展服務器的能力,采用請求-響應模式提供 Web 服務。

當 Web 服務器接收到一個 http 請求時,他會先判斷請求內容,如果請求的內同是靜態網頁數據,Web 服務器會自行處理并返回響應信息;如果請求的內容涉及動態數據,Web 服務器會將請求轉給 servlet 容器,servlet 容器就會找到對應的處理該請求的 servlet 實例,最后 serlvet 實例將結果送回 Web 服務器,再由 Web 服務器傳回客戶端。

JSP 技術

JSP 全稱是 Java Server Pages,它是一種用于開發動態 Web 資源的技術。

JSP 技術的特點在于,開發者寫 JSP 就像在寫 HTML,但它相比 HTML 只能為用戶提供靜態數據,JSP 技術允許在頁面中嵌套 Java 代碼,為用戶提供動態數據。

不管是在開發中使用 JSP 或是 Servlet,它們都可以用于開發動態 Web 資源。但由于這 2 門技術各自的特點,在長期的軟件開發中,工程師逐漸把 servlet 作為 Web 應用中的控制器組件來使用,而把 JSP 技術作為數據顯示模板來使用。

Struts 技術

struts2 是一個遵循 MVC 結構的框架,采用了更加松耦合的設計,使得系統的 action 不與 servlet API 耦合,使系統可以從 B/S 結構轉換為 C/S 結構;action 不需要與 WebWork 耦合,代碼的重用率更高;對 JSP,Velocity,FreeMarker 等表現層技術提供支持;使用攔截器作為增強處理,以用戶的業務邏輯控制為目標,創建一個控制器代理。

Hibernate 技術

hibernate 是輕量級 javaEE 應用的持久層解決方案。Hibernate 對 JDBC 訪問數據庫的代碼做了封裝,負責 Java 對象的持久化,大大簡化了數據訪問層繁瑣的重復性代碼;Hibernate 是一個基于 JDBC 的主流持久化框架,是一個優秀 的 ORM 實現,建立面向對象的域模型和關系數據模型之間的映射,連接 Java 應用和數據庫的中間件,它很大程度的簡化了 dao 層編碼工作,封裝對數據庫的訪問細節,使業務邏輯層更專注于實現業務邏輯;Hibernate 的性能非常好,因為它是一個輕量級框架。映射的靈活性很出色。它支持很多關系型數據庫,跨平臺性很強,從一對一到多對多的各種復雜關系;hibernate 的一級緩存,二級緩存,查詢緩存,使訪問數據的效率提高很大。

Spring 技術

Spring 是根據大量開發中出現的通用步驟對這些通用步驟進行抽取的框架,因此它完成了,他留給開發者的僅僅是與特定應用相關的部分,開發者不需要再編寫系統開發中需要解決的通用問題,從而大大提高開發者的開發效率。

Spring 為企業應用的開發提供了一個輕量級的解決方案。該解決方案包括:基于依賴注入的核心機制,基于 AOP 的聲明式事務管理,與多種持久層技術的整合,以及優秀的 Web MVC 框架等。Spring 致力于 Java EE 應用各層的解決方案,而不僅僅是專注于某一層的方案。

Sping 具有低侵入式的設計,代碼的污染極低;獨立于各種應用服務器,基于 Spring 框架編寫的應用,可以真正實現一處編寫,到處運行的承諾;Spring 的 DI 容器降低了業務對象替換的復雜性,提高了組件之間的解耦;Spring 的 AOP 支持允許將一些通用任務如安全,事務,日志等進行集中式處理,從而提供了更好的復用;Spring 的 ORM 和 DAO 提供了與第三方持久層框架的良好整合,并簡化了底層的數據庫訪問。

系統規劃與系統分析

系統的總體結構

根據文件共享管理系統的設計需求,確定本系統平臺的整體運作模式要求用戶通過 Web 端進入文件共享系統的首頁系統搜索自己需要的文件,用戶根據系統呈現的數據選擇滿足自己需要的,進而點擊該文件在線預覽以驗證該文件是否符合自己的需要,從而再進行文件的下載。最后用戶也可以上傳自己的文件資源供其他用戶檢索下載,從而達到資源共享的目的。

按照每個用戶可以操作的功能來理清系統整體功能,系統功能模塊圖如圖所示的。

圖 3.1 系統功能圖

數據庫需求分析

開發應用系統創建一個合格的數據庫是一個復雜而有重要的任務,數據庫表設計的好壞直接影響到系統進入開發階段的開發效率。所以我們設計一個完整的數據庫應用環境時這要求我們更加廣泛關注問題本身。同時針對數據設計本身,我們要避免兩個方面的缺陷,即冗余和完整性,一個好的設計方案不可能或者很少有重復的信息,當然,也不可能使單位的某個方面難以建模。作為數據庫設計的概念階段,充分考慮系統數據需求,保證設計的數據完整刻畫用戶對系統的數據的需求,還需要以系統的方式定義數據庫用戶的數據需求,并定義滿足這些需求的數據庫結構。

本系統的概念設計如下:

  • ·實體:共有 8 個實體,分別是用戶、管理員、文件、文件地址、評論、舉報、用戶文件狀態和注冊。
  • ·聯系:各個實體通過主外鍵屬性關聯。
  • ·屬性:各個實體屬性如表 3.1 所述。
    表 3.1 文件管理系統實體屬性表

實體名稱

實體屬性

管理員

admineId,賬號,密碼,昵稱

用戶

userId,賬號,密碼,頭像,電子郵箱,生日,是否凍結,惡意行為次數,昵稱

文件

fielId,文件標題,文件介紹,下載次數,好評次數,差評次數,上傳時間,文件總大小,文件是否被封,上傳用戶

文件地址

fileRsesourceId,文件名稱,文件鏈接地址,文件預覽地址,文件大小,上傳文件

評論

commentId,評論內容,評論等級,評論時間,評論人,評論文件

舉報

reportId,舉報用戶,被舉報文件,舉報內容

用戶文件狀態

usestateId,用戶,下載文件,是否評論,是否舉報

注冊

usereamilId,注冊賬號,注冊密碼,郵箱地址,創建時間

通過對文件管理系統的數據概念描述,根據其中的實體,聯系和屬性,構建

文件管理系統數據實體聯系圖,如圖 3.2 所示。

圖 3.2 數據庫實體 ER 圖

系統設計與實現

系統用戶功能設計系統用戶分為三種角色:游客、用戶、管理員。這三個角色的功能如下所述:

游客

搜索資料:游客可以在搜索框輸入要搜索文件的關鍵字進行搜索;

查看文件信息:游客可以點擊搜索結果列表的文件查看該文件的詳細信息以及其他用戶對該文件的評論;預覽文件:游客可以對查看的文件進行在線預覽;

用戶

搜索資料:用戶可以在搜索框輸入要搜索文件的關鍵字進行搜索;

查看文件信息:用戶可以點擊搜索結果列表的文件查看該文件的詳細信息以及其他用戶對該文件的評論;

下載文件:用戶可以下載該文件;

評論文件:用戶可以評論下載過的文件,但只能評論一次;舉報文件:用戶可以舉報下載過的文件,但只能舉報一次;

上傳文件:用戶可以上傳 office 文件供其他用戶下載;用戶注冊:用戶通過郵箱驗證的方式進行注冊;

用戶登錄:用戶登錄成功的同時系統會向用戶手機發送短信告知;查看個人信息:用戶可以查看個人信息;修改個人信息:用戶可以修改個人信息;找回密碼:用戶通過注冊的郵箱信息重設密碼;

管理員

查看投訴列表:管理員查看用戶投訴列表;

處理投訴:對用戶的投訴信息進行查看并處理;

用戶登錄:用戶登錄成功的同時系統會向用戶手機發送短信告知;查看個人信息:用戶可以查看個人信息;

數據庫表存儲設計

在第三節介紹了數據庫表的概念設計之后,接下來講解每個表的實際業務意

義。各信息實體具體描述如下:

表 4.1 管理員表 ADMIN

字段名稱 字段類型

字段長度 是否為主鍵 是否為空

字段說明

ADMINID varchar

10 是 否

主鍵 id

ACCOUNT varchar

10 否 否

賬號

PASSWORD varchar

10 否 否

密碼

NAME varchar

10 否 否

昵稱

  • 管理員表(見表 4.1 所示):用于存儲管理員的賬戶信息。管理員表有 4 個字段,分別是 adminId,賬號,密碼,昵稱,其中 adminId 為數據庫自增字段,也
  • 用戶表(見表 4.2 所示):用于存儲用戶的賬戶信息。用戶表有 9 個字段,分別是 userId,賬號,密碼,昵稱,頭像,生日,電子郵箱,賬號是否凍結(用戶是否可以登錄進系統),惡意行為次數(記錄用戶違規操作,上傳不健康文件),其中 userId 為數據庫自增字段,也是該表主鍵。
    表 4.2 用戶表 USER

字段名稱

字段類型

字段長度 是否為主鍵 是否為空

字段長度 是否為主鍵 是否為空

字段長度 是否為主鍵 是否為空

字段說明

USERID

varchar

10

主鍵 id

ACCOUNT

varchar

10

賬號

PASSWORD

varchar

10

密碼

IMAGE

varchar

10

頭像

EMAIL

varchar

10

電子郵箱

BIRTHDAY

datetime

10

生日

STATE

int

10

賬號是否被凍結

BADBEHA VIOR

int

10

惡意行為次數

NAME

varchar

10

昵稱

文件表(見表 4.3 所示):用于存儲用戶的上傳的文件信息。文件表有 10 個字段,分別是 fileId,文件標題,文件介紹,下載次數,好評次數,差評次數,上傳時間,文件總大小,文件是否被封(文件是否可以被所有用戶檢索到),上傳用戶,其中 fileId 為數據庫自增字段,也是該表主鍵。

表 4.3 文件表 FILE

字段名稱

字段類型

字段長度

是否為主鍵

是否為空

字段說明

FILEID

varchar

10

主鍵 id

TITLE

varchar

10

文件標題

INTRODUCE

varchar

10

文件介紹

DOWNCOUNT

bigint

10

下載次數

GOODCOMM ENT

bigint

10

好評次數

BADCOMME NT

bigint

10

差評次數

DATE

datetime

10

上傳時間

TOTALSIZE

varchar

10

文件總大小

ISUSE

bit

10

是否可見

USERID

varchar

10

上傳者 id

文件地址表(見表 4.4 所示):用于存儲文件信息的實際存儲地址。文件地址表有 6 個字段,分別是 fileresourceId,文件名稱,文件鏈接地址,文件預覽地址,文件大小,文件(這個文件地址屬于哪一個文件的),其中 fileresourceId 為數據

庫自增字段,也是該表主鍵。

表 4.4 文件地址表 FILERESOURCE

字段名稱

字段類型

字段長度

是否為主鍵

是否為空

字段說明

FILERESOU RCEID

varchar

10

主鍵 id

NAME

varchar

10

名稱

FILESRC

varchar

10

鏈接地址

SWFSRC

varchar

10

預覽地址

SIZE

varchar

10

文件大小

FILEID

varchar

10

文件 id

評論表(見表 4.5 所示):用于用戶對文件的評論信息。評論表有 6 個字段,分別是 commentId,評論內容,評論等級(該文件時好或差),評論時間,評論用戶,評論文件,其中 commentId 為數據庫自增字段,也是該表主鍵。

表 4.5 文件評論表 COMMENT

字段名稱

字段類型

字段長度

是否為主鍵

是否為空

字段說明

COMMEN;TID

varchar

10

主鍵 id

TEXT

varchar

10

評論內容

RATE

int

10

評論等級

DATE

datetime

10

評論時間

USER

varchar

10

評論用戶 id

FILEID

varchar

10

被評論文件 id

增字段,也是該表主鍵。;表 4.6 文件舉報表 REPORT

字段名稱 字段類型 字段長度 是否為主鍵 是否為空

字段說明

REPORTID varchar 10 是 否

主鍵 id

USERID varchar 10 否 否

舉報用戶 id

USERFILEID varchar 10 否 否

被舉報文件 id

REASON varchar 10 否 否

舉報內容

舉報表(見表 4.6 所示):用于用戶對文件的舉報信息。舉報表有 4 個字段,分別是 reportId,舉報用戶,被舉報文件,舉報內容,其中 reportId 為數據庫自

用戶文件狀態表(見表 4.7 所示):用于記錄用戶是否下載過對應文件且是否對文件進行過評論或舉報。保證只有下載過對應文件的用戶可以舉報和評論且只能舉報或評論一次。用戶文件狀態表有 5 個字段,分別是 usestateId,用戶,文件,是否評論,是否舉報,其中 usestateId 為數據庫自增字段,也是該表主鍵。表 4.7 文件文件狀態表 USESTATE

字段名稱

字段類型

字段長度

是否為主鍵

是否為空

字段說明

USESTATEID

varchar

10

主鍵 id

USERID

varchar

10

用戶 id

USERFILEID

varchar

10

文件 id

STATE

int

10

是否評論

REPORT

int

10

是否舉報

注冊表(見表 4.8 所示):用于保存用戶注冊但是還未生效的賬號信息,當注冊表的數據超過 24 小時將會刪除,保證賬號的可用性。注冊表有 5 個字段,分別是 usereamilId,注冊賬號,注冊密碼,郵箱地址,創建時間,其中 usereamilId 為數據庫自增字段,也是該表主鍵。

字段名稱 字段類型 字段長度 是否為主鍵

是否為空

字段說明

USEREAMILID varchar 10 是

主鍵 id

ACCOUNT varchar 10 否

注冊賬號

PASSWORD varchar 10 否

注冊密碼

EMAIL varchar 10 否

郵箱地址

DATE datetime 10 否

創建時間

系統的架構設計

表 4.8 注冊表 REGIST

本系統的后臺集群架構的設計如圖 4.1 所示。

圖 4.1 系統架構模塊圖

用戶請求發送到負載均衡主機,主機把請求分發到后臺的應用服務器進行處理,服務器對文件的下載和上傳操作通過文件服務器進行存儲。當用戶搜索文件時,服務器向 lucene 服務器發出請求搜索數據,而不是搜索數據庫。當用戶對數據字典的數據訪問通過緩存服務器獲取,不再通過數據庫獲取。

系統 Web 界面設計

系統首頁:所有用戶包括登錄用戶和未登錄用戶都可以訪問系統首頁,系統首頁以百度搜索為參考,用戶可以在首頁輸入框輸入自己要檢索的文件信息。系統會根據用戶輸入的關鍵字來檢索系統中已經上傳的文件的文件標題和文件簡介是否有符合用戶搜索的,并將滿足的記錄以列表的形式顯示給檢索的用戶,并對關鍵字進行高亮顯示,排序方式會根據文件被搜索的權重進行相關對排序。原型圖如圖 4.2,4.3 所示。

圖 4.2 系統首頁

圖 4.3 系統搜索列表首頁

文件簡介頁面:任何人都可以點擊搜索返回文件列表的某一條數據進入該文件的信息頁面,可以查看文件大小,文件好評和差評數量,文件簡介,文件名稱,文件作者,用戶對文件評論,文件上傳時間,文件的下載路徑,用戶可以對文件進行舉報和評論。如果是未登錄的用戶點擊舉報和評論,下載文件按鈕。系統會自動跳轉到系統登錄頁面,要求用戶只能登錄后才可以舉報,下載和評論文件。

如圖 4.4 所示。

圖 4.4 文件簡介頁面

文件預覽頁面:所有用戶都可以在文件信息頁面點擊預覽按鈕來線預覽文件的內容,不需要下載。如圖 4.5 所示。

圖 4.5 文件預覽頁面

文件舉報頁面:只有登錄的用戶且下載了對應的文件的用戶才可以進入舉報頁面,同時該用戶只能舉報該文件一次,隨后管理員將會對用戶舉報的文件進行審核。如圖 4.6 所示。

圖 4.6 文件舉報頁面

文件舉報頁面:在文件信息頁面,登錄過,且下載該文件的用戶可以評論該文件一次。評論后,將在該文件的評論列表看見評論信息。如圖 4.7 所示。

圖 4.7 文件評論頁面

文件上傳頁面:已經登錄的用戶可以進行文件上傳操作,否則點擊跳轉到用戶登錄頁面。可以上傳多個文件,但是文件類型必須是 office 類型,否則提示上傳失敗,同時必須注明上傳文件的標題和簡介。如果用戶輸入的標題和簡介中含有敏感詞匯會被和諧。文件上傳成功后,會跳轉到文件信息頁面。如圖 4.8 所示。

圖 4.8 文件上傳頁面

登錄頁面:驗證用戶的信息是否正確,正確就進入系統首頁,否則返回該頁,提示登錄錯誤信息。這里驗證用戶信息包括賬號和密碼是否正確以及該用戶的狀態是否是有效,如果無效就無法登錄。只有登錄的用戶才可以下載,舉報和評論下載的文件以及上傳文件,當未登錄的用戶點擊上傳文,下載,評論和舉報按鈕,系統會跳轉到登錄頁面。如圖 4.9 所示。

圖 4.9 系統登錄頁面

注冊頁面:用戶輸入用戶名和郵箱,系統通過 AJAX 異步查詢數據庫,如果用戶名和郵箱已經存在了,則在頁面提示已經被使用,否則提示可以使用(如圖 4.10 所示)。注冊信息通過后,點擊立即注冊,就向注冊郵箱發送激活信息(如圖 4.11 所示),這時候就會跳轉到郵箱頁面。點擊進入郵箱(如圖 4.12 所示),點擊激活鏈接就成功激活了(如圖 4.13 所示)。

圖 4.10 注冊頁面

圖 4.11 郵箱激活頁面

圖 4.12 郵箱頁面

圖 4.13 注冊成功頁面

密碼找回:如果用戶忘記密碼,可以通過注冊時綁定的郵箱進行密碼的重設。

如圖 4.14 所示。操作流程同 4.10 用戶注冊。

圖 4.14 密碼找回頁面

個人信息頁面:登錄用戶可以查看并修改個人信息,用戶只能修改自己的昵稱,頭像,生日。同時用戶可以看見自己的違規次數。如果昵稱含有敏感詞將會被系統和諧掉以*替換。如果上傳的頭像不是圖片類型則提示上傳失敗。如圖 4.15 所示。

圖 4.15 個人信息頁面

管理員登錄頁面:系統有一個單獨的頁面面向管理員,管理員可以登錄系統。

如圖 4.16 所示。

圖 4.16 管理員頁面

投訴處理頁面:管理員登錄系統后,將會看到未處理的用戶舉報列表,管理員選擇查看被投訴的文件,看文件是否符合投訴條件,符合則點擊受理,該文件的所有舉報都被處理,該文件無法被用戶查詢到了,同時記錄上傳該文件者的不良行為,當不良行為到達一定次數后,就會被封號。點擊拒絕,該文件的所有舉報都被處理了。如圖 4.17 所示。

圖 4.17 管理員受理頁面

系統測試

性能測試

網站性能測試的主要衡量指標包括網站的請求響應時間,網站的并發數,網站的吞吐量等。

1,響應時間:系統執行一個完成操作整體消耗的時間,這個時間包括從客戶端發出請求開始到服務器上的系統收到然后把響應數據發出去所需要的時間。

2,并發數:系統能夠同時處理來自客戶端的請求數目,這個指標反映系統的負載特性。

3,吞吐量:指系統在單位時間內處理的請求數量,這個指標可以反應出系統的整體處理能力。

性能測試結果

使用如上的測試方法本系統的性能測試結果如表 5.1 所示。

表 5.1 性能測試結果報告

并發數 響應時間(ms) TPS

并發數 響應時間(ms) TPS

并發數 響應時間(ms) TPS

錯誤率(%) Load 內存(GB)

錯誤率(%) Load 內存(GB)

錯誤率(%) Load 內存(GB)

錯誤率(%) Load 內存(GB)

備注

10

500

20

20

0

5

8

性能測試

20

800

20

20

0

5

8

性能測試

30

1000

30

30

0

10

10

性能測試

40

1200

45

45

20

30

16

性能測試

60

2000

30

30

40

50

16

性能測試

80

超時

0

0

100

不詳

不詳

性能測試

功能測試

在測試中,根據系統的需求分析說明書以及系統的詳細設計說明書,理解不同模塊的輸入輸出條件和邏輯結構,準備每個功能的測試用例,來驗證每個功能模塊的執行結果是否正確。

功能測試結果

由于系統的模塊可限制多,這里主要對部分關鍵功能進行測試用例的描述,具體測試結果如下:

對登錄過程的測試用例表如表 5.2 所示。

表 5.2 登陸測試用例表

用例說明

輸入

預期結果

測試結果

用戶登錄

正確的賬號和密碼

跳轉系統首頁

符合預期

用戶登錄

錯誤的賬號或密碼

停留在登錄頁

符合預期

用戶登錄

凍結的賬號和密碼

停留在登錄頁

符合預期

對文件下載過程的測試用例表如表 5.3 所示。

表 5.3 下載文件測試用例表

用例說明

輸入

預期結果

測試結果

用戶未下載該文件對文件評;論

提交評論

提示用戶沒有下載該文件無法對該文;件進行評論

符合預期

未登錄用戶評論文件

提交評論

跳轉到系統登錄頁面

符合預期

用戶下載該文件對文件評論

提交評論

提交評論成功,文件評論列表顯示用戶;的評論信息

符合預期

用戶評論過該文件再次評論

提交評論

提示用戶評論過該文件無法再次評論

符合預期

對文件舉報過程的測試用例表如表 5.4 所示。

表 5.4 舉報文件測試用例表

用例說明 輸入

預期結果

測試結果

用戶未下載該文件;提交舉報舉報該文件

提示用戶沒有下載該文件無法對該文件進行舉報

符合預期

未登錄用戶舉報該;提交舉報文

跳轉到系統登錄頁面

符合預期

用戶下載該文件舉;提交舉報報該文

提交舉報成功,管理員受理列表顯示該用戶的舉報內容

符合預期

用戶舉報過該文件;提交舉報舉報該文

提示用戶舉報過該文件無法再次舉報

符合預期

對密碼找回過程的測試用例表如表 5.5 所示。

表 5.5 密碼找回測試用例表

用例說明

輸入

輸入

預期結果

測試結果

密碼找回

輸入錯誤的電子郵箱地址

輸入錯誤的電子郵箱地址

停留在原界面,提示用戶郵箱地址有誤

符合預期

密碼找回

輸入的新密碼為空

輸入的新密碼為空

停留在原界面,提示用戶修改的密碼格式不正確

符合預期

密碼找回

輸入的新密碼兩次不相同

輸入的新密碼兩次不相同

停留在原界面,提示用戶兩次密碼不相同

符合預期

密碼找回

輸入新密碼兩次都相同

輸入新密碼兩次都相同

跳轉到激活頁面,點擊按鈕進入郵箱激活

符合預期

對文件上傳過程

的測試用例表如表 5.6

的測試用例表如表 5.6

表 5.6 所示。;文件上傳測試用例表

用例說明

用例說明

輸入 預期結果

輸入 預期結果

測試結果

登錄登錄用

登錄登錄用

點擊上傳文 跳轉到系統登錄頁

點擊上傳文 跳轉到系統登錄頁

符合預期

登錄用戶上傳文件

輸入上傳文 停留在上傳文件頁件格式非 面提示用戶上傳文件的 office 格式 格式不符合要求

符合預期

登錄用戶上傳文件

輸入上傳文 停留在上傳文件頁件的大小超過 面提示用戶上傳文件的; 100M 大小超過要求

符合預期

登錄用戶上傳文件

輸入的文件;停留在上傳文件頁格式為 office,;面提示用戶上傳文件的文件大小小于;標題和簡介的長度不符;100M,文件標題;合和簡介為空

符合預期

登錄用戶上傳文件

輸入的文件格式為 office,;文件大小小于 上傳文件成功,跳轉;100M,文件標題 到該文件詳情頁面長度小于 10,簡介長度小于 50。

符合預期

軟件開發中主要解決的問題

本系統是一個面向互聯網用戶的項目,本系統不僅要保證用戶的賬號安全不被盜用,還有保證本系統中內容的健康性,不散播低俗淫穢內容和用戶體驗的友好和及時性。另外本系統是一個分布式系統,相比以往的傳統系統有很多挑戰需要解決。

帳號登錄的安全性

因為系統的網絡連接采用基于 socket 的 http 協議,所以用戶的輸入的賬號密碼在網絡傳輸過程中存在被人劫持而暴露用戶密碼的風險。采用傳統方式 Web 頁面對前端用戶輸入的明文密碼進行加密,然后在網絡中傳輸加密后的密碼,服務器接收到加密碼后與數據庫中的加密的密碼進行比較來驗證用戶是否可以登錄,但是這種方式下盜號者完全不需要知道用戶的明文密碼是多少,只需要劫持到網絡傳輸中的加密后密碼,以后直接發加密密碼即可登錄系統。

因為以上原因,我們想到的是,用戶在登錄頁面,服務器根據用戶存在與服務器的 session 生成一個隨機碼保存在服務器中,同時把這個值傳給登錄頁面,登錄頁面獲取這個值后拼接到用戶的密碼明文后面進行加密后通過網絡傳輸到服務器,服務器接受到加密后密碼后,通過服務器存儲的隨機值與數據庫的原始密碼也拼接起來加密后進行比較來驗證用戶登錄,這樣就可以保證用戶每一次登錄時通過網絡發送的加密密碼不一樣,這樣就算被劫持,也無法被人使用。

搜索的精準與快速

如何人性化為用戶提供精準服務,采用全文檢索——垂直化搜索引擎主要針對系統內部的自有數據的檢索,通過對系統內部數據建立索引提供給用戶進行檢索。

它既能滿足用戶對全文檢索,模糊匹配的需求,解決數據庫 like 查詢效率低

下的問題,又能夠解決分布式環境下,由于采用分庫分表或使用 NoSQL 數據庫,導致無法進行多表關聯或者進行復雜查詢的問題。

lucene 將文檔中的詞作為關鍵字,建立詞與文檔的映射關系,通過對倒排索引的檢索,可以根據詞快速獲取包含這個詞的文檔列表。

能對句子或段落進行切割,從中取出包含固定語義的詞。

當輸入一個關鍵字進行搜索時,可能會命中許多文檔,搜索引擎給用戶的價

值就是快速地找到需要的文檔,根據排序算法,將相關度更大的內容排在前面,命中多次的文檔比命中一次的文檔有更高的相關性。

文件的處理

傳統系統用戶只能下載文件后才能查看文件內容,并不能讓用戶在文件下載

之前就能查看文件的內容,經常導致用戶下載文件后發現文件不是自己想要的,不僅影響用戶的體驗,同時也給網站帶來流量開銷和連接的壓力。為了實現文件預覽,我們需要將文件轉換為 swf 文件,實現 flash 播放達到預覽,在這里面我們不僅要考慮不用版本 office 文件處理問題,還要考慮如果文件里面有圖片如何準確提取出來把數據正確的存儲到 swf 文件中。在這我們通過 Java 代碼使用 OpenOffice 服務把文件轉換為 swf 文件,使用 FlexPaper,swfTools 在線預覽,從而達到用戶不需下載文件就能看到文件內容。

敏感詞過濾

由于本系統收錄的敏感詞庫中包含上萬個敏感詞,系統要對用戶輸入的文件信息進行處理,檢查用戶輸入的信息是否含有敏感詞,但是這里帶來一個效率問題,采用傳統思路,系統會對用戶輸入的一個文本數據比對上萬次,來驗證文本數據是否包含敏感詞庫的詞。顯然這是十分耗時的。NFA 是非確定性的狀態機,

DFA 是確定性的狀態機。確定性和非確定性的最大區 別就是:從一個狀態讀入一個字符,確定性的狀態機得到一個狀態,而非確定性的狀態機得到一個狀態的集合。如果我們把 NFA 的起始狀態 S 看成一個集合{S} 的話,對于一個狀態集合 S’,給定一個輸入,就可以用 NFA 計算出對應的狀態集合 T’。因此我們在構造 DFA 的時候,只需要把起始狀態對應到 S’,并且找 到所有可能在 NFA 同時出現的狀態集合,把這些集合都轉換成 DFA 的一個狀態,那么任務就完成了。因為 NFA 的狀態是有限的,所以 NFA 所有狀態的集合的 冪集的元素個數也是有限的,因此使用這個方法構造 DFA 是完全可能的。

網站高并發

一臺 Tomcat 服務器最大能支持的穩定并發數在 100—120 之間,因為本系統是面向互聯網用戶的,所以在同一時刻本系統面對的并發數遠遠大于 120,當實際并發數大于 Tomcat 服務器的支持數量后,會導致服務器因為壓力過大而無法及時處理其他請求,甚至導致服務器宕機。考慮到高并發訪問的情況,本系統使用 Nginx 服務器的負載均衡技術構建一個由多臺服務器組成的服務器集群,將來自客戶端的并發訪問請求分發到多臺服務器上處理,避免單一服務器出現負載壓力過大的情況。

為了保證當任意一臺或多臺服務器宕機,Nginx 服務器將請求提交給集群中其他任意一臺可用服務器能夠正確處理處理,本系統需要設置每一臺服務器不保存請求的狀態,這樣所有的服務器完全對等,服務器就可以成功處理其他服務器之前處理的請求了。

服務器集群下狀態共享

集群中所有的應用服務器都是無狀態的,但是在業務上系統總是有狀態的,因為系統需要記錄用戶當前的登錄狀態來確定用戶是否可以執行接下來的操作。 Web 應用中將這些多次請求使用的上下文對象稱作會話(session),單機情況下, session 可由部署在服務器上的 Web 容器管理。在使用負載均衡的集群環境中,請求由負載均衡服務器分發到集群上任意一臺應用服務器上,如何保證任意一臺應用服務器對每次請求依然能夠獲得正確的 session 是一個挑戰。

通過將一部分數據存儲在 cookie 中,來解決分布式環境下 session 操作同步的問題。但是這樣做的弊端有很多,比如 cookie 的安全性,cookie 存儲數據的大小的限制。

本系統的解決方案是將 session 統一存儲在緩存集群 memcache 上,這樣保證較高的讀,寫性能,再從安全性上看,利用緩存的失效機制,達到控制 session 有效期的的作業。

高并發下磁盤讀寫速度

系統在面對高并發的情況下,大量的讀,寫請求涌向數據庫,磁盤的處理速度與內存顯然不在一個量級,為了能提高系統對數據的讀取速度,通常將常用的數據放在內存中,這樣就避免了應用程序讀取硬盤而增加時間開銷。

memcache 是一個高性能的內存對象緩存系統,為了提高在內存中查找數據的速度,memcache 在內存中維護一張巨大的 HashTable,使得對數據查詢的時間復雜度降低到 O(1)。內存的空間總是有限的,當內存沒有更多的空間來存儲新數據時,memcache 會使用 LRU 算法,將最近不常訪問的數據淘汰掉,以騰出空間來存放新的數據。

分布式數據庫事務一致性

軟件系統對單個數據庫內部的多個 DML 操作都會組成一個局部事務,因為這些操作不會跨越多個事務性資源,軟件系統可以直接使用底層數據庫的事務支持;但是當軟件系統的功能操作涉及對多個數據庫的修改時,就面臨多個數據庫事務的一致性問題,這些數據庫的操作要么全部成功要么全部不成功,這就是分布式事務,分布式事務處理的對象是全局事務。

使用 JTA 編程就可以用一種與事務管理器無關的方式來開始,提交或回滾事務,Java EE 應用服務器通過 Java 事務服務來實現事務管理器。JTA 事務由 Java EE 事務管理器負責控制,它可以保證多個數據庫更新的一致性,通過 JTA 即可實現全局事務控制。

集群下 quartz 協調處理

在集群環境下,大家會碰到一直困擾的問題,即多個應用程序下如何用 quartz 協調處理自動化工作。比如現在有 A,B,C 三臺服務器同時作為集群服務器對外統一提供服務;A,B,C 三臺臺機器上各有一個 Quarzt,他們會按照即定的時間頻率自動執行各自的任務。這樣的架構其實有點像多線程,那多線程里就會存在“資源競爭”的問題,即可能產生臟讀,臟寫,由于三臺應用服務器里都有 Quarzt,因此會存在重復處理任務的現象。quartz 的任務實例化如數據庫,基于數據庫引擎及 High-Available 的策略(集群的一種策略)自動協調每個節點的 quartz,當任一一節點的 quartz 非正常關閉或出錯時,另幾個節點的 quartz 會自動啟動;這樣每臺作為集群點的應用程序上都可以布署 quartz;無需開發人員更改原已經實現的 quartz,使用 Spring 類反射的機制對原有程序作切面重構。

結論

去年 10 月我拿到論文題目,第一反應就是做一個類似百度文庫,面向所有互聯網用戶的系統,而不是一個內部系統。確定了目標之后,在后面的兩個月我遇到了很多挑戰,同時也開闊了我的視野。

我意識到僅僅對登錄的密碼進行加密并不能提高密碼的安全性,我也意識到當從操作一個數據庫到操作多個數據庫的挑戰,也意識到如何提高系統的并發能力,在系統集群的環境下會遇到哪些問題。在這個過程中我參考了很多架構設計的書,吸取了很多有豐富經驗的架構師的架構心得。

最后我明白了我們在開發一個系統時不要一開始就企圖去設計一個大型的網站。大型網站不是設計出來的,而是逐步根據不同的情況下發展演化出來的。每一種架構都沒有好壞之分,只存在是否在當前系統面臨的壓力下是最好的一種方式。就像阿里巴巴去 IOE,并不是 IOE 不適合阿里巴巴的系統,而是阿里巴巴的系統在發展到一定程度后,IOE 在很多業務情況下已經無法滿足阿里巴巴系統的需要了。

我們以后在開發軟件系統時不要為了技術而技術,不能因為某個技術很火就盲目的在系統中采用該技術,我們要記住網站技術是為了業務而存在的。

六、參考文獻

王志剛,江友華.MySQL 高效編程.北京:人民郵電出版社,2011.01:9-10.

苗澤.nginx 高性能 Web 服務器詳解[M].北京:電子工業出版社,2013.10.

陳康賢.大型分布式網站架構與設計實踐[M].北京:電子工業出版社,2014.09. [4]羅剛.解密搜索引擎技術實戰:lucene&java 精華版[M].第二版.北京:電子工業出版社,2014.01.李智慧.大型網站技術架構:核心原理與案例分析[M].北京:電子工業出版社,2013.09.劉瓊. Peer-to-Peer 文件共享系統的測量研究[D].北京:中國科學院軟件研究所,2011 年.倪高鵬.基于 Memcached 的緩存系統設計與實現[D].大連理工大學:丁鋒,2012 年. [8]王利萍.基于 Nginx 服務器集群負載均衡技術的研究與改進[D].山東大學:袁東風,2015年.李永春;丁華福.Lucene 中文分析器在書目搜索應用中的比較研究[J].業務研究,2014 年,4期:23-25.劉志鵬;衛晨;丁華福.基于 Quartz 與 Spring 的動態任務調度系統的設計與實現[J].計算機光盤軟件與應用,2014 年,13 期:44-45.李汝光;徐駿;丁華福.基于 JTA 的跨數據庫分布式事務的實現[N].常州工學院學報,2012 年,4 期.Charles A.Bell,Mats Kindahl,Lars Thalmann .MySQL High Availability[M].北京:東南大學出版社,2015.02.

附:開題報告正文

文件共享管理系統的設計與實現

文件共享管理系統研究背景在日常生活中,通常會遇到很多問題需要獲得相應的知識進行解決。比如想要寫一個勞動合同,但是不知道具體的格式,從而導致寫的合同不規范,影響工作效率。因此,我設計了能夠滿足這種需求的系統——文件共享管理系統。

通過文件共享管理系統,廣大用戶可以上傳自己的資料供其他需要的用戶進行搜索并下載作為參考模板。這樣可以極大的提高用戶在日常生活中解決問題所耗費的精力,提高用戶效率并為用戶提供專業的知識科普。

本課題的開發思想與解決方案

文件共享系統不僅能要夠存儲用戶文件,提供用戶搜索。在面對互聯網環境下我們要考慮的有如下幾點:

如何人性化為用戶提供精準服務,采用全文檢索,進行相關度排序,把相關度高的搜索結果排在上面,對存儲文本數據和用戶搜索關鍵詞進行智能分詞提高搜索命中率。

如何存儲海量的數據單獨的文件服務器存儲海量數據,緩解應用服務器的存儲壓力。

如何屏蔽不健康信息,使用 DFA 算法,根據系統收錄的敏感詞詞庫中智能屏蔽用戶上傳數據中含有的敏感詞。

如何避免必要的流量開銷,減少用戶不必要的下載次數。使用 FlexPaper, swfTools,OpenOffice 實現 office 文件的在線預覽,從而達到用戶不需下載文件就能看到文件內容。

如何提高系統的并發量而不宕機,一個應用服務器支持的穩定的并發連接是有限的,當客戶端的請求并發量超過了一個應用服務器提供的穩定連接后,該系統通過架構 nginx 服務器做反向代理來搭建應用服務器集群,這樣系統支持的穩定連接就隨著應用服務器的增加線性上升。

如何避免不必要的數據(硬盤)查詢次數,用戶對系統的操作就是對數據庫數據的獲取操作,傳統單機系統就是通過把一些常用,少變得數據放到緩存(內存)中,比起直接再從數據庫(硬盤)中獲取數據,以指數級提高了效率。但是在本應用服務器集群中,采用傳統方案會導致各自服務器中緩存的數據不一致,導致從緩存獲取數據的命中率降低。這時候我們使用 Redis 技術,搭建 Redis 集群,把應用服務器集群要存儲到緩存的數據存儲到 Redis 服務器中,以后獲取緩存數據從 Redis 服務器中獲取,這樣就保證了緩存數據的一致。

如何在集群服務下 session 共享,使得用戶在第一次連接 A 服務器后,第二次連接 B 服務器后,服務器還能夠記住用戶。這里同樣要把 session 存儲到 Redis 服務器中。

如何提高數據庫的執行效率,系統的業務不同,不同的表的查詢次數壓力不同,為了提高數據庫的執行效率,高效響應各種查詢語句,根據業務壓力,把不同的表劃分到不同的數據庫,從而分拆數據庫的壓力。

如何保證保證一個業務邏輯處理中對每個獨立數據庫的操作能夠同時回滾或執行成功保持一致性。該系統采用 JTA 分布式事務規范,可以保證數據庫的跨源操作的一致性問題。

如何保證管理員能夠準時執行某些功能保證系統的可控性,該系統在某些業務功能上使用任務調度框架定時進行處理。

如何保證用戶賬號安全性,該系統通過使用 javaMail 技術進行用戶密碼修改和找回密碼的驗證,通過第三方短信驗證接口在該賬號登陸系統時向用戶手機發送短信告知。

參考文獻

  • 王志剛,江友華.MySQL 高效編程.北京:人民郵電出版社,2011.01:9-10.
  • 苗澤.nginx 高性能 Web 服務器詳解[M].北京:電子工業出版社,2013.10.
  • 陳康賢.大型分布式網站架構與設計實踐[M].北京:電子工業出版社,2014.09.
  • 羅剛.解密搜索引擎技術實戰:lucene&java 精華版[M].第二版.北京:電子工業出版社,2014.01.
  • 李智慧.大型網站技術架構:核心原理與案例分析[M].北京:電子工業出版社,2013.09.
  • 劉瓊. Peer-to-Peer 文件共享系統的測量研究[D].北京:中國科學院軟件研究所,2011 年.
  • 倪高鵬.基于 Memcached 的緩存系統設計與實現[D].大連理工大學:丁鋒,2012 年.
  • 王利萍.基于 Nginx 服務器集群負載均衡技術的研究與改進[D].山東大學:袁東風,2015 年.
  • 李永春;丁華福.Lucene 中文分析器在書目搜索應用中的比較研究[J].業務研究,2014 年,4 期:23-25.
  • 劉志鵬;衛晨;丁華福.基于 Quartz 與 Spring 的動態任務調度系統的設計與實現[J].計算機光盤軟件與應用,2014 年,13 期:44-45.
  • 李汝光;徐駿;丁華福.基于 JTA 的跨數據庫分布式事務的實現[N].常州工學院學報,2012 年;4 期.
  • Charles A.Bell,Mats Kindahl,Lars Thalmann .MySQL High Availability[M].北京:東南大學出版社,2015.02.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916151.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916151.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916151.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

go語言基礎教程:1. Go 下載安裝和設置

1. Go 下載安裝和設置1. 安裝Go 官網下載安裝即可,注意要記住安裝的位置,例如D:\Go cmd輸入go 或者go env 會輸出各種信息,代表安裝成功 2. hello go (1)編寫 hello.go go是以文件夾為最小單位管理程序的&#xff0c…

使用相機不同曝光時間測試燈光閃爍頻率及Ai解釋

1.背景坐地鐵上,撥弄著手機拍照中的專業模式,偶然發現拍出了條紋,懷疑是燈光的緣故,但是隨后在家里的LED等下就拍不出類似的效果了。好奇心?讓我又嘗試多了解了一點和不斷嘗試,發現不同的曝光時間可以拍出不同明顯程度…

力扣-416.分割等和子集

題目鏈接 416.分割等和子集 class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int i 0; i < nums.length; i) {sum nums[i];}if (sum % 2 1)return false;int target sum / 2;// dp[i]表示&#xff1a;背包容量為i時&#xff0c;能裝的最大…

http協議學習-body各種類型

1、概述使用postman工具和nc命令分析http協議中body各種類型的格式。2、分析環境準備虛擬機中用nc命令模仿服務器&#xff0c;啟動監聽狀態。 windows機器安裝postmannc -k -l 192.168.202.223 80821、params參數postman中params添加倆個key為m、n&#xff1b;value為1、2&…

C++中的塔尖算法(Tarjan算法)詳解

C中的塔尖算法&#xff08;Tarjan算法&#xff09;詳解——目錄C中的塔尖算法&#xff08;Tarjan算法&#xff09;詳解一、什么是Tarjan算法&#xff1f;二、算法原理與實現步驟1. 核心概念2. 主要邏輯3. C代碼示例三、應用場景與擴展1. 典型應用2. 注意事項四、為什么選擇Tarj…

Qt 數據庫事務處理與數據安全

在 Qt 應用程序中&#xff0c;數據庫事務處理是確保數據完整性和一致性的關鍵技術。通過事務&#xff0c;可以將多個數據庫操作作為一個不可分割的單元執行&#xff0c;保證數據在并發訪問和異常情況下的安全性。本文將詳細介紹 Qt 中數據庫事務的處理方法和數據安全策略。 一、…

Redis的事務和Lua之間的區別

Redis的事務和Lua之間的區別 Redis 提供了事務和 Lua 腳本兩種實現原子性操作的方式。當需要以原子方式執行多個命令時,我們可以選擇其中一種方案。 原子性保證 兩者都確保操作的不可分割性 需要注意:不管是事務還是 Lua 腳本都不支持回滾機制 區別: 事務:某個命令失敗不會…

騰訊云SDK

SDK的用途&#xff0c;現在顯然是想更系統地了解它的產品定位和核心能力。 用戶可能是開發者或者技術決策者&#xff0c;正在評估騰訊云的開發工具鏈。從ta連續追問云服務相關技術細節的習慣看&#xff0c;應該具備相當的技術背景&#xff0c;但需要避免過度使用術語。 需要突出…

大數據集分頁優化:LIMIT OFFSET的替代方案

針對大數據集分頁場景中 LIMIT OFFSET 的性能瓶頸&#xff0c;以下是已驗證的高效替代方案及實施要點&#xff1a;?? 一、LIMIT OFFSET 的核心問題當偏移量&#xff08;OFFSET&#xff09;增大時&#xff0c;數據庫需?物理掃描并丟棄前 N 條記錄?&#xff0c;導致資源浪費和…

Linux網絡框架分析

在 Linux 內核架構中,/net 和 /drivers/net 是網絡子系統的兩個核心組成部分,它們之間的關系體現了 Linux 經典的 “抽象層分離” 設計哲學。以下是深入分析: 一、核心關系圖解 #mermaid-svg-esFw9i3LN65SYumi {font-family:"trebuchet ms",verdana,arial,sans-se…

ISIS高級特性GR

一、概述IS-IS GR是一種支持GR能力的高可靠性技術&#xff0c;可以實現數據的不間斷轉發。與我們之前介紹的OSPF的GR功能幾乎一致,但實現方法并不相同。1、GR支持GR的ISIS的設備,IIH報文中一定會攜帶TLV211(GR),TLV211包含的字段(1)RR:restart request 請求重啟,默認是3秒發送1…

電廠液壓執行器自動化升級:Modbus TCP與DeviceNet的協議貫通實踐

一、項目背景在我們電廠的汽輪機控制區&#xff0c;液壓執行器是實打實的“關鍵選手”——從調節蒸汽閥門開度到控制閘板起落&#xff0c;全靠它在高壓環境下精準動作。但這套系統一直有個“溝通障礙”&#xff1a;負責統籌控制的施耐德PLC走Modbus TCP協議&#xff0c;而液壓執…

ucharts 搭配uniapp 自定義x軸文字 實現截取顯示

formatter格式化問題因為組件不能傳遞 function&#xff0c;所有的 formatter 均需要變成別名 format 來定義&#xff0c;并在 config-ucharts.js 或 config-echarts.js 配置對應的 formatter 方法&#xff0c;組件會根據 format 的值自動替換配置文件中的 formatter 方法。uCh…

Logstash 多表增量同步 MySQL 到 Elasticsearch:支持邏輯刪除與熱加載,Docker 快速部署實戰

? 1. 項目結構 install-elk/ ├── start-elastic.sh ├── es-data/ # Elasticsearch 持久化目錄&#xff08;自動創建&#xff09; ├── logstash/├── logstash.yml├── pipeline/│ ├── user.conf│ ├── articles.conf│ …

服務器托管:網站經常被攻擊該怎么辦?

“木馬”對于孩子來說是個玩具&#xff0c;但是對于網絡行業來說是一個病毒威脅&#xff0c;站長在進行建站的過程中&#xff0c;通常都會面臨一個問題網站被掛馬&#xff0c;有些網站服務器托管在進行多次處理木馬之后得不到根治&#xff0c;后續會受到頻繁的攻擊該怎么辦&…

判斷子序列-leetcode

給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些&#xff08;也可以不刪除&#xff09;字符而不改變剩余字符相對位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一個子序列&#x…

如何提高微信小程序的應用速度

1、如何提高微信小程序的應用速度&#xff1f;加載時1、上傳代碼時&#xff0c;對代碼進行壓縮。2、清理點代碼中無效的代碼和資源文件。3、減少本地代碼中圖片等資源的數量和大小。如將多個圖片合成一張圖片。還有將圖片資源放在靜態資源庫存儲。渲染1、在加載頁面時&#xff…

華為高頻算法題:最長連續遞增子序列(Longest Continuous Increasing Subsequence)

文章目錄前言題目描述&#xff08;華為校招真題&#xff09;解題思路分析Java 實現代碼單元測試代碼結語前言 在各大互聯網公司的算法面試中&#xff0c;數組類題目一直是考察的重點&#xff0c;尤其是對于應屆生和初級工程師的面試來說更是常見題型。華為作為國內頂尖的科技企…

JavaSE-圖書信息管理系統

目錄 前置知識點 項目部署說明 項目運行截圖 項目結構展示 項目編寫構思 book包 Book類 Booklist類 ioperations包 IOPeration接口 AddOperation類 BorrowOperation類 DelOperation類 FindOperation類 ReturnOperation類 ShowOperation類 ExitOperation類 use…

網絡 IP 地址總結

網絡IP地址總結 一、IPv4地址核心分類與特殊網段 IPv4地址是32位二進制數&#xff08;通常表示為4組0-255的十進制數&#xff0c;即“點分十進制”&#xff09;&#xff0c;總地址空間約43億個。根據用途可分為公有地址&#xff08;公網使用&#xff0c;全球唯一&#xff09;和…