語義庫存儲
① 信息驅動模型,將影像信息劃分為哪些層次
信息驅動模型將影像信息劃分為四個層次,分別是圖像層、區域層、對象層和場景層。
圖像層是最基本的層次,描述了影像的基本特徵,如顏色、紋理、形狀等。
區域層是在圖像層的基礎上,對圖像進行分割得到的區域,每個區域具有一定的相似性,如顏色、紋理等。
對象層是在區域層的基礎上,通過對區域進行分類、聚類等處理得瞎空到的對象,每個對象具有一定的語義信息,如人、車、建築等。
場景層是在對象層的基礎上,對對象的空間關系、動態變磨祥瞎化等宴或進行分析,得到場景的語義信息,如交通擁堵、人流密集等。
這四個層次相互關聯、相互作用,構成了信息驅動模型,可以對影像信息進行深入分析和理解。
② 人腦中的信息存儲在哪
人腦的神經生物學結構亦稱腦實體結構,它是指由成百億神經元組成的具有復雜連接通路與迴路的龐大的神經網路。與生物的其它組織器官一樣,腦的神經網路首先是生物進化中遺傳、變異和自然選擇的產物。在物種進化中被創造出來的這種實體結構,被編碼在人的DNA序列中。作為遺傳基因載體的DNA雙螺旋,既能通過不斷的自我復制把編碼腦結構的信息傳遞給後代,又有在個體發育中通過轉錄RNA和轉譯蛋白質的方式把腦的神經網路結構在每一代個體中再現出來。因此,對每一個有認識能力的具體人來說,腦的神經生物學結構首先是由遺傳因素決定的先於自身經驗的結構。
人腦又是一個可塑性很強的神經器官。外界和內部環境中的各種作用或刺激能從個體發育和機能建構兩個水平上影響它的結構與功能的組織形式。
環境因素引起人腦的機能建構過程主要是信息結構的構築和與之相關的機能結構的形成過程。機能建構作用能把編碼在基因中的本能信息和同化於主體中的外來信息緊緊地嵌合在人腦的實體結構之中,逐漸形成不同於實體結構的腦機能結構。
神經心理學的興起使腦機能結構的研究成為一門日趨獨立的新興學科。在這一領域中,前蘇聯著名學者魯利亞做出了意義深遠的貢獻。他澄清了「機能」「定位」等對腦機能結構研究有重要意義的基本概念;創立了神經心理學的臨床測驗法;尤其是劃分出了人腦基本的機能結構系統。他認為,人腦有三個基本的機能聯合區,它們是:(1)保證調節緊張度或覺醒狀態的聯合區;(2)接受、加工和保存來自外部世界信息的聯合區;(3)制定程序、調節和控制心理活動的聯合區。每個機能聯合區又能進一步分成具有不同生理與心理功能的一級皮質區(或投射區)、二級皮質區(或投射-聯絡區)和三級皮質區(或重疊區)〔④〕。魯利亞的精闢見解和對腦機能結構所作的這些劃分,對現代心理學、認知科學的研究具有頗為重要的價值。然而,從腦科學今天的發展水平看,我認為他的研究仍有若干不足之處。其中最突出的,就是沒有把信息存儲系統(即記憶系統)作為一個獨立的機能結構系統提出來,僅把它說成是具有保存來自外部世界信息的第二機能聯合區的獨有功能。
心理學的實驗事實和大量的日常經驗早已示明,人腦不僅能保存來自外部世界的信息,還能保存人的活動技能,人體驗過的情緒、情感以及思維中使用的操作規則、方法策略等等。腦科學的新近研究也指出,人腦中三個基本機能聯合區所在的那些腦組織結構都是記憶信息存儲的場所,並不只限於第二機能聯合區的腦組織。與記憶信息的存入和取出有關的腦組織結構,主要是位於大腦皮層前額葉以及顳葉內下側的海馬和杏仁核等
人腦中的信息存儲系統也是一個最基本的機能結構系統(或機能聯合區)。這個機能聯合區與魯利亞的前三個聯合區有著並列且相互依存的功能。從腦的神經生物學結構看,信息存儲系統的腦組織除前額區、海馬、杏仁核等可做明顯區分外,其餘部分則和上述三個機能聯合區的腦組織重疊在一起,因而難於單獨區分。
綜上所述,人腦的機能結構不僅是發育過程中基因表達的產物,更是以攝取外界信息為前提的腦機能建構的結果。因而它是既包含先天因素又包含習得因素,既包括腦「硬體」又包括腦「軟體」的復雜統一體。人的認知結構、心理結構這類似乎看不見、摸不著的東西,就是嵌合在人腦的機能結構之中,並通過它轉變成了切實可見的存在物的
從腦的神經生物學結構看,信息存儲系統的腦組織除前額區、海馬、杏仁核等可做明顯區分外,其餘部分則和上述三個機能聯合區的腦組織重疊在一起,因而難於單獨區分。
從腦的神經生物學結構看,信息存儲系統的腦組織除前額區、海馬、杏仁核等可做明顯區分外,其餘部分則和上述三個機能聯合區的腦組織重疊在一起,因而難於單獨區分。
③ 一文回顧.NET Core 基礎設施演進之路
作者丨Matt Mitchell
譯者丨平川
隨著.NET Core 3.0 預覽版 6 的推出,我們認為有必要簡要回顧一下基礎設施系統的 歷史 ,以及在過去一年左右時間里所做的重大改進。如果你對構建基礎設施感興趣,或者希望了解如何構建像.NET Core 這樣大的產品,那麼這篇文章將非常有趣。
從 3 年前開始,.NET Core 項目就與傳統的微軟項目有很大的不同。
我們早期的基礎設施決策是圍繞必要性和便利性做出的。我們使用 Jenkins 進行 GitHub PR 和 CI 驗證,因為它支持跨平台的 OSS 開發。我們的官方構建版本位於 Azure DevOps(當時稱為 VSTS)和 TeamCity(由 ASP 使用)中,其中有簽名和其他關鍵的交付基礎設施。我們搭配使用手動更新包依賴項版本和自動化 GitHub PR 的方法將存儲庫集成在一起。團隊獨立地構建了他們需要的工具來進行打包、布局、本地化,以及在大型開發項目中出現的所有其他常見任務。雖然不是很理想,但在某種程度上,這在早期已經運行得足夠好了。隨著項目從.NET Core 1.0 和 1.1 發展到 2.0 以及更高版本,我們希望投資於進一步整合的技術棧、更快的交付周期和更簡單的服務。我們希望每天多次使用最新的運行時來生成一個新的 SDK。我們希望所有這些都不降低獨立存儲庫的開發速度。
.NET Core 面臨的許多基礎設施方面的挑戰都源於存儲庫結構的隔離和分布式特性。盡管多年來它變化很大,但該產品是由 20 到 30 個獨立的 Git 存儲庫組成(ASP.NET Core 直到最近鍵鎮還比它多得多)。一方面,擁有許多獨立的開發豎井會使這些豎井中的開發非常高效;開發人員可以在庫中快速迭代,而不用擔心棧的其他部分。另一方面,它使得整個項目的創新和集成效率大大降低。下面是一些例子:
在所有這些情況下,都有可能在許多層面上出現失敗,從而進一步減緩進程。隨著.NET Core 3.0 計劃的正式啟動,很明顯,如果不對基礎設施進行重大更改,我們就無法創建所需范圍的版本。
為了減輕痛苦,我們三管齊下:
Arcade
在.NET Core 3.0 之前,有 3 到 5 種不同的工具實現分散在不同的存儲庫中,這和你如何計算有關。
雖然在這個世界上,每個團隊都可以定製他們的工具,只構建他們需要的東西,但這確實有一些顯著的缺點:
開發人員在存儲庫之間切換時效率更低
例如:當開發人員從 dotnet/corefx 切換到 dotnet/core-sdk 時,存儲庫的「語言」是不同的。她輸入什麼來構建和測試?日誌放在哪裡?如果她需要在存儲庫中添加一個新項目,該如何做?
需要的每譽猛個特性都要構建 N 次
例如:.NET Core 生成了大量的 NuGet 包。雖然有一些變化(例如,共享運行時包如出自 dotnet/core-setup 的 Microsoft.NETCore.App 就與 Microsoft.AspNet.WebApi.Client 等「普通」包的構建方式不同),但生成它們的步驟非常相似。遺憾的是,由於存儲庫在布局、項目結構等方面的差異,如何實現這些打包任務方面也產生了差異。存儲庫如何定義應該生成什麼包、這些包中包含什麼、它們的元數據等等。如果沒有共享工具,團隊通常更容易實現另一個打包任務,而不是重用另一個。這當然會導致資源壓力。
藉助 Arcade,我們努力使所有的存儲庫採用公共的布局、存儲庫「語言」和任務集(可能的話)。這並非沒有陷阱。任何一種共享工具稿虛粗最終都會解決一些「剛剛好」問題。如果共享工具過於規范,那麼在任何規模的項目中進行所需的定製都將變得非常困難,並且更新該工具也將變得非常困難。使用新的更新很容易破壞存儲庫。構建工具遭受了這種痛苦。使用它的存儲庫與它緊密耦合,以至於它不僅不能用於其他存儲庫,而且對構建工具進行任何更改常常會以意想不到的方式傷害用戶。如果共享工具不夠規范,那麼存儲庫在使用工具時往往會出現差異,並且推出更新通常需要在每個單獨的存儲庫中做大量的工作。那麼,為什麼要共享工具呢?
實際上,Arcade 嘗試同時使用了這兩種方法。它將公共存儲庫「語言」定義為腳本集(請參閱 eng/common)、公共存儲庫布局和作為 MSBuild SDK 推出的公共構建目標集。選擇完全採用 Arcade 的存儲庫具有可預測的行為,使得更改很容易在存儲庫之間傳播。不希望這樣做的存儲庫可以從提供基本功能(如簽名和打包)的各種 MSBuild 任務包中進行選擇,這些任務包在所有存儲庫中看起來都是一樣的。當我們對這些任務進行更改時,我們會盡力避免破壞性更改。
讓我們來看看 Arcade 提供的主要特性,以及它們如何集成到我們更大的基礎設施中。
Azure DevOps
如上所述,較大的團隊通過 2.2 版本使用了一個 CI 系統的組合:
許多差異僅僅是出於必要性。Azure DevOps 不支持公共 GitHub PR/CI 驗證,所以 ASP.NET Core 轉向 AppVeyor 和 Travis 來填補這個空白,而.NET Core 則投資於 Jenkins。經典 Azure DevOps 對構建編排沒有太多的支持,所以 ASP.NET Core 團隊求助於 TeamCity,而.NET Core 團隊則在 Azure DevOps 之上構建了一個名為 PipeBuild 的工具來幫助克服困難。所有這些差異都是非常昂貴的,即使是以一些不明顯的方式:
當 Azure DevOps 開始推出基於 YAML 的構建管道和對公共 GitHub 項目的支持時,隨著.NET Core 3.0 的啟動,我們意識到,我們擁有一個獨特的機會。有了這種新的支持,我們可以將現在所有的工作流從單獨的系統轉移到現代的 Azure DevOps 中,並對我們處理正式 CI 和 PR 工作流的方式進行一些更改。我們的工作大致如下:
到目前為止,所有主要的.NET Core 3.0 存儲庫都在 Azure DevOps 上進行公共 PR 和正式 CI。一個很好的例子是 dotnet/arcade 本身的正式構建 /PR 管道。
Maestro 和依賴流
.NET Core 3.0 基礎架構的最後一塊拼圖就是我們所說的依賴流。這並不是.NET Core 獨有的概念。除非它們是完全自包含的,否則大多數軟體項目都包含對其他軟體的某種版本化引用。在.NET Core 中,這些包通常表現為 NuGet 包。當我們需要庫提供的新特性或修復時,我們通過更新項目中引用的版本號來獲取這些新更新。當然,這些包也可能有對其他包的版本化引用,那些其他包可能有更多的引用,等等。這就形成了一張圖。當每個存儲庫拉取其輸入依賴項的新版本時,更改將在圖中流動。
一個復雜的圖
大多數軟體項目的主要開發生命周期(開發人員經常從事的工作)通常涉及少量相互關聯的存儲庫。輸入依賴關系通常是穩定的,更新很少。當他們確實需要更改的時候,通常是手工操作。開發人員評估輸入包的可用版本,選擇合適的版本,然後提交更新。但在.NET Core 中並非如此。組件需要獨立,以不同的節奏交付,並具有高效的內循環開發體驗,這導致了大量具有大量相互依賴關系的存儲庫。相互依賴關系也形成了一個相當深的圖:
Dotnet/core-sdk 存儲庫作為所有子組件的聚合點。我們提供了一個特定的 dotnet/core-sdk 構建,它描述了所有其他引用的組件。
我們還希望新的輸出能夠快速通過這個圖,以便盡可能多地驗證最終產品。例如,我們期望 ASP.NET Core 或.NET Core 運行時的最新片段盡可能多地在 SDK 中表現自己。本質上,這意味著定期快節奏地更新每個存儲庫中的依賴項。在一個足夠大的圖中,就像.NET Core 一樣,這很快就變成了一個不可能手工完成的任務。這種規模的軟體項目可能會通過以下幾種方法來解決這個問題:
.NET Core 已經嘗試了所有 3 種方法。我們在 1.x 的早期漂移版本。在 2.0 中實現了一定程度的自動化依賴流,並為 2.1 和 2.2 構建了一個復合構建。在 3.0 中,我們決定大量投資於自動化依賴流,放棄其他方法。我們想在一些重要的方面改進我們以前的 2.0 基礎設施:
這些概念的設計使得存儲庫所有者不需要棧或其他團隊流程的全局知識就可以參與依賴流。他們只需要知道三件事:
.NET Core 3 開發通道的流圖,包括.NET Core 3 Dev 流的其他通道(例如,Arcade 的「.NET Tools Latest」)。
一致和不一致
非一致性會導致哪些問題? 不一致性表示可能的錯誤狀態。舉個例子,讓我們看看 Microsoft.NETCore.App。這個包表示特定的 API 表面。雖然存儲庫依賴關系圖中可能會引用 Microsoft.NETCore.App 的多個版本,但 SDK 只提供一個。這個運行時必須滿足可在該運行時上執行的間接引用組件(例如 WinForms 和 WPF)的所有需求。如果運行時不滿足這些需求(例如破壞性 API 變更),可能就會發生故障。在不一致的圖中,因為所有存儲庫都沒有使用相同版本的 Microsoft.NETCore.App,有可能錯過了一個破壞性的變更。
這是否意味著不一致始終是一種錯誤狀態? 不。例如,我們假設圖中 Microsoft.NETCore.App 的不一致只代表一個非破壞性 JIT Bug 修復 coreclr 中的一個變更。從技術上講,微軟沒有必要在圖中的每一點上獲取新的 Microsoft.NETCore.App。只需針對新的運行時交付相同的組件就足夠了。
如果不一致只是偶爾的問題,那麼我們為什麼還要努力才能推出一致的產品呢? 因為很難確定什麼時候不一致無關緊要。簡單地將一致性作為所需狀態進行交付,要比試圖理解不一致的組件之間的任何語義差異對最終產品所產生的影響更容易。這是可以做到的,但是從構建頻率來說,它是時間密集型的,並且容易出錯。強制將一致性作為默認狀態更安全。
依賴流的好處
隨著存儲庫圖越來越大,所有這些自動化和跟蹤都有許多明顯的優勢。它為我們解決日常生活中的實際問題提供了很多可能性。雖然我們剛剛開始 探索 這個領域,但系統已經可以開始回答一些有趣的問題,並處理以下場景:
隨著.NET Core 3.0 逐步結束,我們正在尋找新的領域來改進。雖然計劃仍處於(非常)初期的階段,但我們預計在以下幾個關鍵領域進行投資:
多年來,我們已經對基礎設施進行了相當大的改進。從 Jenkins 到 Azure DevOps,從手工依賴流到 Maestro++,從許多工具實現到一個工具實現,我們對.Net Core 3.0 所做的改變是一個巨大的進步。我們已經為開發和交付比以往任何時候都更可靠、更令人興奮的產品做好了准備。
原文鏈接:
https://devblogs.microsoft.com/dotnet/the-evolving-infrastructure-of-net-core/
④ 大數據的核心技術有哪些
大數據技術的體系龐大且復雜,基礎的技術包含數據的採集、數據預處理、分布式存儲、資料庫、數據倉庫、機器學習、並行計算、可視化等。
1、數據採集與預處理:FlumeNG實時日誌收集系統,支持在日誌系統中定製各類數據發送方,用於收集數據;Zookeeper是一個分布式的,開放源碼的分布式應用程序協調服務,提供數據同步服務。
2、數據存儲:Hadoop作為一個開源的框架,專為離線和大規模數據分析而設計,HDFS作為其核心的存儲引擎,已被廣泛用於數據存儲。HBase,是一個分布式的、面向列的開源資料庫,可以認為是hdfs的封裝,本質是數據存儲、NoSQL資料庫。
3、數據清洗:MapRece作為Hadoop的查詢引擎,用於大規模數據集的並行計算。
4、數據查詢分析:Hive的核心工作就是把SQL語句翻譯成MR程序,可以將結構化的數據映射為一張資料庫表,並提供HQL(HiveSQL)查詢功能。Spark啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。
5、數據可視化:對接一些BI平台,將分析得到的數據進行可視化,用於指導決策服務。
⑤ 對調用資料庫數據的命令進行語法、語義和許可權檢查的信息,存儲於下列哪一個(些)結構中
【答案】:A
在執行笑如資料庫訪問命令碰段啟之前,DBMS先對命令進行語法檢查,語法檢查通過後進行語義檢查和用戶存取許可權檢查。具體做法是,DBMS讀取數據字典,檢查燃弊是否存在該關系及相應的欄位,該用戶能否讀取它們等。確認語義正確、存儲許可權合法後便決定執行該命令。否則拒絕執行,返回錯誤信息。所以對調用資料庫命令進行語法、語義和許可權檢查的信息存儲於數據字典中。
⑥ python中怎麼保存到add變數
將變數存儲到目標文件中區pickle.mp(shoplist,f)#關閉文件f.close()#刪除變數。
在python中,變數保存的是對象(值)的引用,我們稱為引用語義,只是把數據保存到了資料庫里。
python中的add()函數可將對象作為一個整體加入字典中。
⑦ 分布式文件存儲系統採用什麼方式
一。分布式Session的幾種實現方式 1.基於資料庫的Session共享 2.基於NFS共享文件系統 3.基於memcached 的session,如何保證 memcached 本身的高可用性? 4. 基於resin/tomcat web容器本身的session復制機制 5. 基於TT/Redis 或 jbosscache 進行 session 共享。 6. 基於cookie 進行session共享 或者是: 一、Session Replication 方式管理 (即session復制) 簡介:將一台機器上的Session數據廣播復制到集群中其餘機器上 使用場景:機器較少,網路流量較小 優點:實現簡單、配置較少、當網路中有機器Down掉時不影響用戶訪問 缺點:廣播式復制到其餘機器有一定廷時,帶來一定網路開銷 二、Session Sticky 方式管理 簡介:即粘性Session、當用戶訪問集群中某台機器後,強制指定後續所有請求均落到此機器上 使用場景:機器數適中、對穩定性要求不是非常苛刻 優點:實現簡單、配置方便、沒有額外網路開銷 缺點:網路中有機器Down掉時、用戶Session會丟失、容易造成單點故障 三、緩存集中式管理 簡介:將Session存入分布式緩存集群中的某台機器上,當用戶訪問不同節點時先從緩存中拿Session信息 使用場景:集群中機器數多、網路環境復雜 優點:可靠性好 缺點:實現復雜、穩定性依賴於緩存的穩定性、Session信息放入緩存時要有合理的策略寫入 二。Session和Cookie的區別和聯系以及Session的實現原理 1、session保存在伺服器,客戶端不知道其中的信息;cookie保存在客戶端,伺服器能夠知道其中的信息。 2、session中保存的是對象,cookie中保存的是字元串。 3、session不能區分路徑,同一個用戶在訪問一個網站期間,所有的session在任何一個地方都可以訪問到。而cookie中如果設置了路徑參數,那麼同一個網站中不同路徑下的cookie互相是訪問不到的。 4、session需要藉助cookie才能正常<nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="key3" onmouseover="kwE(event,3, this);" style="COLOR: #6600ff; BORDER-BOTTOM: 0px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">工作</nobr>。如果客戶端完全禁止cookie,session將失效。 http是無狀態的協議,客戶每次讀取web頁面時,伺服器都打開新的會話,而且伺服器也不會自動維護客戶的上下文信息,那麼要怎麼才能實現網上商店中的 購物車呢,session就是一種保存上下文信息的機制,它是針對每一個用戶的,變數的值保存在伺服器端,通過SessionID來區分不同的客 戶,session是以cookie或URL重寫為基礎的,默認使用cookie來實現,系統會創造一個名為JSESSIONID的輸出cookie,我 們叫做session cookie,以區別persistent cookies,也就是我們通常所說的cookie,注意session cookie是存儲於瀏覽器內存中的,並不是寫到硬碟上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但 是當我們把瀏覽器的cookie禁止後,web伺服器會採用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到 sessionid=KWJHUG6JJM65HS2K6之類的字元串。 明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區別了,網上那些關於兩者安全性的討論也就一目瞭然了,session cookie針對某一次會話而言,會話結束session cookie也就隨著消失了,而persistent cookie只是存在於客戶端硬碟上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站腳本攻擊,自然不如 session cookie安全了。 通常session cookie是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統會賦予你一個新的sessionid,這樣我們信息共享的目的就達不到 了,此時我們可以先把sessionid保存在persistent cookie中,然後在新窗口中讀出來,就可以得到上一個窗口SessionID了,這樣通過session cookie和persistent cookie的結合我們就實現了跨窗口的session tracking(會話跟蹤)。 在一些web開發的書中,往往只是簡單的把Session和cookie作為兩種並列的http傳送信息的方式,session cookies位於伺服器端,persistent cookie位於客戶端,可是session又是以cookie為基礎的,明白的兩者之間的聯系和區別,我們就不難選擇合適的技術來開發web service了。 總之: 一、cookie機制和session機制的區別 具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。 同時我們也看到,由於在伺服器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上還有其他選擇。 二、會話cookie和持久cookie的區別 如果不設置過期時間,則表示這個cookie生命周期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽會話期的cookie被稱為會話cookie。會話cookie一般不保存在硬碟上而是保存在內存里。 如果設置了過期時間,瀏覽器就會把cookie保存到硬碟上,關閉後再次打開瀏覽器,這些cookie依然有效直到超過設定的過期時間。 存儲在硬碟上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存的cookie,不同的瀏覽器有不同的處理方式。 三、如何利用實現自動登錄 當用戶在某個網站注冊後,就會收到一個惟一用戶ID的cookie。客戶後來重新連接時,這個用戶ID會自動返回,伺服器對它進行檢查,確定它是否為注冊用戶且選擇了自動登錄,從而使用戶無需給出明確的用戶名和密碼,就可以訪問伺服器上的資源。 四、如何根據用戶的愛好定製站點 網站可以使用cookie記錄用戶的意願。對於簡單的設置,網站可以直接將頁面的設置存儲在cookie中完成定製。然而對於更復雜的定製,網站只需僅將一個惟一的標識符發送給用戶,由伺服器端的資料庫存儲每個標識符對應的頁面設置。 五、cookie的發送 1.創建Cookie對象 2.設置最大時效 3.將Cookie放入到HTTP響應報頭 如果你創建了一個cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的cookie:存儲在瀏覽器的內存中,用戶退出瀏覽器之後被刪除。如 果你希望瀏覽器將該cookie存儲在磁碟上,則需要使用maxAge,並給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該 cookie。 發送cookie需要使用HttpServletResponse的addCookie方法,將cookie插入到一個 Set-Cookie HTTP請求報頭中。由於這個方法並不修改任何之前指定的Set-Cookie報頭,而是創建新的報頭,因此我們將這個方法稱為是addCookie,而 非setCookie。同樣要記住響應報頭必須在任何文檔內容發送到客戶端之前設置。 六、cookie的讀取 1.調用request.getCookie 要獲取有瀏覽器發送來的cookie,需要調用HttpServletRequest的getCookies方法,這個調用返回Cookie對象的數組,對應由HTTP請求中Cookie報頭輸入的值。 2.對數組進行循環,調用每個cookie的getName方法,直到找到感興趣的cookie為止 cookie與你的主機(域)相關,而非你的servlet或JSP頁面。因而,盡管你的servlet可能只發送了單個cookie,你也可能會得到許多不相關的cookie。 例如: String cookieName = 「userID」; Cookie cookies[] = request.getCookies(); if (cookies!=null){ for(int i=0;i Cookie cookie = cookies[i]; if (cookieName.equals(cookie.getName())){ doSomethingWith(cookie.getValue()); } } } 七、如何使用cookie檢測初訪者 A.調用HttpServletRequest.getCookies()獲取Cookie數組 B.在循環中檢索指定名字的cookie是否存在以及對應的值是否正確 C.如果是則退出循環並設置區別標識 D.根據區別標識判斷用戶是否為初訪者從而進行不同的操作 八、使用cookie檢測初訪者的常見錯誤 不能僅僅因為cookie數組中不存在在特定的數據項就認為用戶是個初訪者。如果cookie數組為null,客戶可能是一個初訪者,也可能是由於用戶將cookie刪除或禁用造成的結果。 但是,如果數組非null,也不過是顯示客戶曾經到過你的網站或域,並不能說明他們曾經訪問過你的servlet。其它servlet、JSP頁面以及 非Java Web應用都可以設置cookie,依據路徑的設置,其中的任何cookie都有可能返回給用戶的瀏覽器。 正確的做法是判斷cookie數組是否為空且是否存在指定的Cookie對象且值正確。 九、使用cookie屬性的注意問題 屬性是從伺服器發送到瀏覽器的報頭的一部分;但它們不屬於由瀏覽器返回給伺服器的報頭。 因此除了名稱和值之外,cookie屬性只適用於從伺服器輸出到客戶端的cookie;伺服器端來自於瀏覽器的cookie並沒有設置這些屬性。 因而不要期望通過request.getCookies得到的cookie中可以使用這個屬性。這意味著,你不能僅僅通過設置cookie的最大時效, 發出它,在隨後的輸入數組中查找適當的cookie,讀取它的值,修改它並將它存回Cookie,從而實現不斷改變的cookie值。 十、如何使用cookie記錄各個用戶的訪問計數 1.獲取cookie數組中專門用於統計用戶訪問次數的cookie的值 2.將值轉換成int型 3.將值加1並用原來的名稱重新創建一個Cookie對象 4.重新設置最大時效 5.將新的cookie輸出 十一、session在不同環境下的不同含義 session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/消息,比如打電話是從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。 然而當session一詞與網路協議相關聯時,它又往往隱含了「面向連接」和/或「保持狀態」這樣兩個含義。 session在Web開發環境下的語義又有了新的擴展,它的含義是指一類用來在客戶端與伺服器端之間保持狀態的解決方案。有時候Session也用來指這種解決方案的存儲結構。 十二、session的機制 session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。 但程序需要為某個客戶端的請求創建一個session的時候,伺服器首先檢查這個客戶端的請求里是否包含了一個session標識-稱為session id,如果已經包含一個session id則說明以前已經為此客戶創建過session,伺服器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個,這種情況可能出現在服務端已經刪除了該用戶對應的session對象,但用戶人為 地在請求的URL後面附加上一個JSESSION的參數)。 如果客戶請求不包含session id,則為此客戶創建一個session並且生成一個與此session相關聯的session id,這個session id將在本次響應中返回給客戶端保存。 十三、保存session id的幾種方式 A.保存session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給伺服器。 B. 由於cookie可以被人為的禁止,必須有其它的機制以便在cookie被禁止時仍然能夠把session id傳遞回伺服器,經常採用的一種技術叫做URL重寫,就是把session id附加在URL路徑的後面,附加的方式也有兩種,一種是作為URL路徑的附加信息,另一種是作為查詢字元串附加在URL後面。網路在整個交互過程中始終 保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session id。 C.另一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把session id傳遞回伺服器。 十四、session什麼時候被創建 一個常見的錯誤是以為session在有客戶端訪問時就被創建,然而事實是直到某server端程序(如Servlet)調用HttpServletRequest.getSession(true)這樣的語句時才會被創建。 十五、session何時被刪除 session在下列情況下被刪除: A.程序調用HttpSession.invalidate() B.距離上一次收到客戶端發送的session id時間間隔超過了session的最大有效時間 C.伺服器進程被停止 再次注意關閉瀏覽器只會使存儲在客戶端瀏覽器內存中的session cookie失效,不會使伺服器端的session對象失效。
⑧ 分布式存儲有哪些
問題一:當前主流分布式文件系統有哪些?各有什麼優缺點 目前幾個主流的分布式文件系統除GPFS外,還有PVFS、Lustre、PanFS、GoogleFS等。
1.PVFS(Parallel Virtual File System)項目是Clemson大學為了運行linux集群而創建的一個開源項目,目前PVFS還存在以下不足:
1)單一管理節點:只有一個管理節點來管理元數據,當集群系統達到一定的規模之後,管理節點將可能出現過度繁忙的情況,這時管理節點將成為系統瓶頸;
2)對數據的存儲缺乏容錯機制:當某一I/O節點無法工作時,數據將出現不可用的情況;
3)靜態配置:對PVFS的配置只能在啟動前進行,一旦系統運行則不可再更改原先的配置。
2.Lustre文件系統是一個基於對象存儲的分布式文件系統,此項目於1999年在Carnegie Mellon University啟動,Lustre也是一個開源項目。它只有兩個元數據管理節點,同PVFS類似,當系統達到一定的規模之後,管理節點會成為Lustre系統中的瓶頸。
3.PanFS(Panasas File System)是Panasas公司用於管理自己的集群存儲系統的分布式文件系統。
4.GoogleFS(Google File System)是Google公司為了滿足公司內部的數據處理需要而設計的一套分布式文件系統。
5.相對其它的文件系統,GPFS的主要優點有以下三點:
1)使用分布式鎖管理和大數據塊策略支持更大規模的集群系統,文件系統的令牌管理器為塊、inode、屬性和目錄項建立細粒度的鎖,第一個獲得鎖的客戶將負責維護相應共享對象的一致性管理,這減少了元數據伺服器的負擔;
2)擁有多個元數據伺服器,元數據也是分布式,使得元數據的管理不再是系統瓶頸;
3)令牌管理以位元組作為鎖的最小單位,也就是說除非兩個請求訪問的是同一文件的同一位元組數據,對於數據的訪問請求永遠不會沖突.
問題二:分布式存儲是什麼?選擇什麼樣的分布式存儲更好? 分布式存儲系統,是將數據分散存儲在多 *** 立的設備上。傳統的網路存儲系統採用集中的存儲伺服器存放所有數據,存儲伺服器成為系統性能的瓶頸,也是可靠性和安全性的焦點,不能滿足大規模存儲應用的需要。分布式網路存儲系統採用可擴展的系統結構,利用多台存儲伺服器分擔存儲負荷,利用位置伺服器定位存儲信息,它不但提高了系統的可靠性、可用性和存取效率,還易於擴展。
聯想超融合ThinkCloud AIO超融合雲一體機是聯想針對企業級用戶推出的核心產品。ThinkCloud AIO超融合雲一體機實現了對雲管理平台、計算、網路和存儲系統的無縫集成,構建了雲計算基礎設施即服務的一站式解決方案,為用戶提供了一個高度簡化的一站式基礎設施雲平台。這不僅使得業務部署上線從周縮短到天,而且與企業應用軟體、中間件及資料庫軟體完全解耦,能夠有效提升企業IT基礎設施運維管理的效率和關鍵應用的性能
問題三:什麼是分布式存儲系統? 就是將數據分散存儲在多 *** 立的設備上
問題四:什麼是分布式數據存儲 定義:
分布式資料庫是指利用高速計算機網路將物理上分散的多個數據存儲單元連接起來組成一個邏輯上統一的資料庫。分布式資料庫的基本思想是將原來集中式資料庫中的數據分散存儲到多個通過網路連接的數據存儲節點上,以獲取更大的存儲容量和更高的並發訪問量。近年來,隨著數據量的高速增長,分布式資料庫技術也得到了快速的發展,傳統的關系型資料庫開始從集中式模型向分布式架構發展,基於關系型的分布式資料庫在保留了傳統資料庫的數據模型和基本特徵下,從集中式存儲走向分布式存儲,從集中式計算走向分布式計算。
特點:
1.高可擴展性:分布式資料庫必須具有高可擴展性,能夠動態地增添存儲節點以實現存儲容量的線性擴展。
2 高並發性:分布式資料庫必須及時響應大規模用戶的讀/寫請求,能對海量數據進行隨機讀/寫。
3. 高可用性:分布式資料庫必須提供容錯機制,能夠實現對數據的冗餘備份,保證數據和服務的高度可靠性。
問題五:分布式文件系統有哪些主要的類別? 分布式存儲在大數據、雲計算、虛擬化場景都有勇武之地,在大部分場景還至關重要。munity.emc/message/655951 下面簡要介紹*nix平台下分布式文件系統的發展歷史:
1、單機文件系統
用於操作系統和應用程序的本地存儲。
2、網路文件系統(簡稱:NAS)
基於現有乙太網架構,實現不同伺服器之間傳統文件系統數據共享。
3、集群文件系統
在共享存儲基礎上,通過集群鎖,實現不同伺服器能夠共用一個傳統文件系統。
4、分布式文件系統
在傳統文件系統上,通過額外模塊實現數據跨伺服器分布,並且自身集成raid保護功能,可以保證多台伺服器同時訪問、修改同一個文件系統。性能優越,擴展性很好,成本低廉。
問題六:分布式文件系統和分布式資料庫有什麼不同 分布式文件系統(dfs)和分布式資料庫都支持存入,取出和刪除。但是分布式文件系統比較暴力,可以當做key/value的存取。分布式資料庫涉及精煉的數據,傳統的分布式關系型資料庫會定義數據元組的schema,存入取出刪除的粒度較小。
分布式文件系統現在比較出名的有GFS(未開源),HDFS(Hadoop distributed file system)。分布式資料庫現在出名的有Hbase,oceanbase。其中Hbase是基於HDFS,而oceanbase是自己內部實現的分布式文件系統,在此也可以說分布式資料庫以分布式文件系統做基礎存儲。
問題七:分布式存儲有哪些 華為的fusionstorage屬於分布式 您好,很高興能幫助您,首先,FusionDrive其實是一塊1TB或3TB機械硬碟跟一塊128GB三星830固態硬碟的組合。我們都知道,很多超極本同樣採用了混合型硬碟,但是固態硬碟部分的容量大都只有8GB到32GB之間,這個區間無法作為系統盤來使用,只能作
問題八:linux下常用的分布式文件系統有哪些 這他媽不是騰訊今年的筆試題么
NFS(tldp/HOWTO/NFS-HOWTO/index)
網路文件系統是FreeBSD支持的文件系統中的一種,也被稱為NFS。
NFS允許一個系統在網路上與它人共享目錄和文件。通過使用NFS, 用戶和程序可以象訪問本地文件一樣訪問遠端系統上的文件。它的好處是:
1、本地工作站使用更少的磁碟空間,因為通常的數據可以存放在一台機器上而且可以通過網路訪問到。
2、用戶不必在每個網路上機器裡面都有一個home目錄。home目錄可以被放在NFS伺服器上並且在網路上處處可用。
3、諸如軟碟機、CDROM、和ZIP之類的存儲設備可以在網路上面被別的機器使用。可以減少整個網路上的可移動介質設備的數量。
開發語言c/c++,可跨平台運行。
OpenAFS(openafs)
OpenAFS是一套開放源代碼的分布式文件系統,允許系統之間通過區域網和廣域網來分享檔案和資源。OpenAFS是圍繞一組叫做cell的文件伺服器組織的,每個伺服器的標識通常是隱藏在文件系統中,從AFS客戶機登陸的用戶將分辨不出他們在那個伺服器上運行,因為從用戶的角度上看,他們想在有識別的Unix文件系統語義的單個系統上運行。
文件系統內容通常都是跨cell復制,一便一個硬碟的失效不會損害OpenAFS客戶機上的運行。OpenAFS需要高達1GB的大容量客戶機緩存,以允許訪問經常使用的文件。它是一個十分安全的基於kerbero的系統,它使用訪問控制列表(ACL)以便可以進行細粒度的訪問,這不是基於通常的Linux和Unix安全模型。開發協議IBM Public,運行在linux下。
MooseFs(derf.homelinux)
Moose File System是一個具備容錯功能的網路分布式文件統,它將數據分布在網路中的不同伺服器上,MooseFs通過FUSE使之看起來就 是一個Unix的文件系統。但有一點問題,它還是不能解決單點故障的問題。開發語言perl,可跨平台操作。
pNFS(pnfs)
網路文件系統(Network FileSystem,NFS)是大多數區域網(LAN)的重要的組成部分。但NFS不適用於高性能計算中苛刻的輸入書櫥密集型程序,至少以前是這樣。NFS標準的罪行修改納入了Parallel NFS(pNFS),它是文件共享的並行實現,將傳輸速率提高了幾個數量級。
開發語言c/c++,運行在linu下。
googleFs
據說是一個比較不錯的一個可擴展分布式文件系統,用於大型的,分布式的,對大量數據進行訪問的應用。它運行於廉價的普通硬體上,但可以提供容錯功能,它可以給大量的用戶提供性能較高的服務。google自己開發的。
問題九:分布式存儲都有哪些,並闡述其基本實現原理 神州雲科 DCN NCS DFS2000(簡稱DFS2000)系列是面向大數據的存儲系統,採用分布式架構,真正的分布式、全對稱群集體系結構,將模塊化存儲節點與數據和存儲管理軟體相結合,跨節點的客戶端連接負載均衡,自動平衡容量和性能,優化集群資源,3-144節點無縫擴展,容量、性能歲節點增加而線性增長,在 60 秒鍾內添加一個節點以擴展性能和容量。
問題十:linux 分布式系統都有哪些? 常見的分布式文件系統有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自適用於不同的領域。它們都不是系統級的分布式文件系統,而是應用級的分布式文件存儲服務。
GFS(Google File System)
--------------------------------------
Google公司為了滿足本公司需求而開發的基於Linux的專有分布式文件系統。。盡管Google公布了該系統的一些技術細節,但Google並沒有將該系統的軟體部分作為開源軟體發布。
下面分布式文件系統都是類 GFS的產品。
HDFS
--------------------------------------
Hadoop 實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。 Hadoop是Apache Lucene創始人Doug Cutting開發的使用廣泛的文本搜索庫。它起源於Apache Nutch,後者是一個開源的網路搜索引擎,本身也是Luene項目的一部分。Aapche Hadoop架構是MapRece演算法的一種開源應用,是Google開創其帝國的重要基石。
Ceph
---------------------------------------
是加州大學聖克魯茲分校的Sage weil攻讀博士時開發的分布式文件系統。並使用Ceph完成了他的論文。
說 ceph 性能最高,C++編寫的代碼,支持Fuse,並且沒有單點故障依賴, 於是下載安裝, 由於 ceph 使用 btrfs 文件系統, 而btrfs 文件系統需要 Linux 2.6.34 以上的內核才支持。
可是ceph太不成熟了,它基於的btrfs本身就不成熟,它的官方網站上也明確指出不要把ceph用在生產環境中。
Lustre
---------------------------------------
Lustre是一個大規模的、安全可靠的,具備高可用性的集群文件系統,它是由SUN公司開發和維護的。
該項目主要的目的就是開發下一代的集群文件系統,可以支持超過10000個節點,數以PB的數據量存儲系統。
目前Lustre已經運用在一些領域,例如HP SFS產品等。
⑨ 語義信息的存儲
無論是知識庫還是服務的語義描述都需要具有良好的組織和存儲,以支持高效推理和服務檢索發現。目前對於本體的存儲方法基本有三種(李勇等,2008):
(1)純文本,如 OWL 文件。由於 XML 的信息組織和存儲方式結構復雜,而且存在冗餘等,基於其上的查詢檢索效率通常會比較低。純文本的方式適合本體比較小的時候,不適合本體大規模應用的情況。
(2)資料庫: 是一種比較好的持久化存儲方式,最大好處是便於查找,可存放大本體,查詢效率高,特別在 I/O 效率上。但是資料庫方式存在本體查詢語言到 SQL 的轉換問題,需要藉助於第三方中間件或自定義實現。
(3)專門的管理工具: 比如說 OMM(Ontology Middleware Mole)支持對 RDF、OWL 的存儲管理,還提供各種介面,可以使用查詢語言對 RDF 或者 OWL 進行查詢。綜合對比這三種本體存儲方式,由於關系資料庫存儲幾十年的技術積累,以及它的海量存儲特點而成為了許多研究者的首選。
5.4.3.1 本體的關系資料庫存儲模式
由於本體模型和關系模型的差異,目前存在多種在關系模型中存儲本體的方法,其主要可以分為以下四類(陶皖等,2007; 陳光儀,2009)。
5.4.3.1.1 水平模式
該模式只在資料庫中保留一張通用表,表中列為本體中的屬性。整個本體庫中定義了多少個屬性,這張表就有多少個列,具體如圖 5.28 所示。本體中的每個實例對應該表中的一條記錄。這種存儲模式結構簡單,執行查詢操作比較方便。但是該通用表包含了大量的列,而現有的資料庫系統對一張表中列的個數都是有限制的,所以該模式無法存儲規模較大的本體。而且表中的數據過於稀疏。由於每個實例對應關系表中的一行,如果其在某些屬性列上沒有值,那麼必須將對應的屬性值設置為空,這將導致大量空欄位的出現,不僅浪費存儲空間,而且增加了索引維護的代價。另外該通用表中一個實例的屬性和屬性值只能是一對一,而實際情況往往是一對多,因此無法存儲具有這種特徵的本體。隨著應用中本體的進化,還需要時常更新通用表中的列,重新組織表結構,這將耗費極大的系統代價。
圖 5.28 水平存儲模式
5.4.3.1.2 垂直模式
垂直模式包含一張三元組表,表中的每條記錄都對應一個 RDF 三元組(主語,謂詞,賓語),具體如圖 5.29 所示。因此這種模式下,需要將本體中的所有信息都以 RDF 三元組的形式表示出來。Protege(2002)中便是使用了這種存儲模式將本體存儲於資料庫中。這種模式設計簡單,並且結構穩定。如果本體進行了更新,只需修改表中相應的元組即可。另外,該模式通用性好,因為現有的本體模型都可以轉換為 RDF 模型表示。但是這種模式的可讀性較差,若對本體信息進行查詢,那麼設計對應的 SQL 語句比較麻煩。除此之外,由於所有信息都存放在三元組表中,導致任何一個本體信息查詢都必須遍歷整個數據表,特別是那些需要進行表連接的查詢,使得查詢效率非常低,這是這種模式最大的不足之處。
圖 5.29 垂直存儲模式
5.4.3.1.3 分解模式
該模式與水平模式和垂直模式的一個顯著的區別是它使用了若干張表,其基本思想是將資料庫進行模式分解。根據分解的對象不同,現有的採用分解模式的方法有兩種。①基於類的分解模式,即為本體中的每個類都創建一張單獨的表,表名為類名,表的列為類的屬性,具體如圖 5.30 所示。這種模式結構清晰,但是很難適應本體動態變化的情況,因為隨著本體中類或者屬性的變化,表結構都要隨著變化。②基於屬性的分解模式,即為本體中的每個屬性創建一張單獨的表,表名為屬性名,每個表都包含兩個列,分別代表RDF 三元組中的主語和賓語,具體如圖 5.31 所示。在該模式中對類的隱含實例的查詢代價很大,而且在現有的這兩種分解模式的方法中,隨著本體的變化都要不斷的創建和刪除表,而在資料庫系統中創建和刪除表的效率很低。
圖 5.30 按類分解模式
圖 5.31 按屬性分解模式
5.4.3.1.4 混合模式
該模式通常將上述幾種模式進行混合使用。例如,Pan 等(2003)提出這樣一種將基於類的分解模式與基於屬性的分解模式混合的存儲模式,即在本體中定義一個類就為該類創建一個表(創建方法類似於基於類的分解模式),在本體中定義一個屬性就為該屬性創建一個表(創建方法類似於基於屬性的分解模式)。然而,與基於類的分解模式不同的是,該混合模式在類對應的表中不記錄相應實例的所有信息,而只記錄實例的 ID。實例在各個屬性上的取值則分別記錄在各屬性對應的表中,所以和基於屬性的分解模式類似,該模式在屬性對應的表中仍然需要兩列: 主語和賓語。對於本體類數目不多的情況下,這種模式在簡單檢索的情況下,運行得很好。但是,如果本體的類比較多,這種方式就會存在一些問題,例如: 資料庫無法容納這么多表,或者效率低下。
針對上述四種模式,陳光儀(2009)從四個方面對適用場合、查詢和更新效率、結構清晰以及易理解性、可擴展性四個方面對他們進行了綜合對比(表 5.4):
表 5.4 不同存儲模式的綜合對比
(修改自陳光儀,2009)
通過上述對本體存儲模式的闡述及之間的綜合對比發現,本體存儲模式除了應該具有盡量高的規范化程度(例如滿足第三範式或 BCNF 范圍等),還應該滿足以下三個原則。
(1)模式結構易於理解。該原則是為了便於本體查詢的實現。如果模式結構不直觀,會給查詢語句的設計帶來困難。例如,垂直模式不滿足該要求,它將所有的信息都採用三元組的形式存儲在一張表中,不容易理解表中元組的含義,加重了本體查詢設計的負擔。
(2)模式結構穩定。即本體的變化不會引起資料庫表結構的變化。因為本體是不斷進化的,如果設計的模式結構會隨著本體的變化而變化,資料庫系統對其維護代價太大。現有的水平模式、分解模式和混合模式都不滿足該要求。
(3)查詢效率高。該原則是評價各種存儲模式的一個重要指標。因為本體中不僅包含大量的數據,而且查詢中還經常需要進行表連接。例如在現有的垂直模式和基於屬性的分解模式中,那些涉及表連接的查詢效率非常低。
目前在基於資料庫的本體存儲的實踐上,一些學者開展了相關的研究工作:
燕雲鵬(2007)和陳光儀(2009)提出了類似的針對於針對 OWL 的本體資料庫的混合本體存儲模式(圖 5.32,5.33)。可以看出這種模式是以基於屬性的分解模式與垂直模式的混合體,具有較好的擴展性。但是存在的問題是效率不夠高,所有的類存儲在一個表中,所有的實例也存儲在一個表中,這種方式的檢索效率比較低。另外存儲實例的表(Instance,Proterty,Value)中欄位 Value 必須存儲許多種不同類型的數值,比如有的是文本型,而有的卻是數值型,使得數據不夠清晰。此外,在針對幾何體這種復雜的地理對象,這種欄位就比較難以存儲。
圖 5.32 本體的資料庫混合存儲模式(據燕雲鵬,2007)
ebRIM(ebXML Registry Information Model)是一個主流的信息注冊模型,已成為事實上的標准,得到了 OGC 等支持。OGC 已經實現了基於 ebRIM 的目錄服務,並推薦其作為目錄服務的實現規范。但是目前基於 ebRIM 的目錄服務只支持普通的基於關鍵字的檢索。為此,一些學者已經開始研究如何擴展 ebRIM 實現對語義信息特別是 OWL 的注冊。Dogac 等(2004)提出了如圖 5.34 所示的一種通過將 XML 形式存儲的 OWL 文件轉換為以資料庫形式存儲,使得查詢檢索更加快速,管理維護也更加方便。為了能在 ebRIM 存儲復雜的地理空間信息對象,一些學者開展了基於 ebRIM 的地理擴展方面的研究工作。樂鵬(2007)在其論文中提出了兩種擴展方式: ① 從類 「ExtrinsicObject」 派生了「CSWExtrinsicObject」來描述那些不是 ebRIM 自身定義的元數據對象。比如類 「Dataset」繼承了 「CSWExtrinsicObject」來描述空間數據集。②對 ebRIM 已有的類別增加 「Slot」。每一個從 「RegistryObject」繼承下來的類均允許添加 「Slot」。ebRIM 中的 「Service」類可以用來描述空間服務,但是已有的屬性不足以描述空間網路服務。因此,通過添加「Slot」到 「Service」類中以定義從 ISO 19119 派生的屬性。如圖 5.35 所示為經擴展後的ebRIM 高層模型圖,其中 灰 色 填 充 的 矩 形 框表示 擴 展 的對 象 類。該 模 式 與 前 面 燕 雲 鵬(2007)和陳光儀(2009)提出的模式相比,本質上差別不大,也是以基於屬性的分解模式與垂直模式的混合體,只不過是基於標準的 ebRIM 注冊模型,並且將其中的分類系統相關的類單獨以兩張表存儲。該模式也具有很好的擴展性,也存在同樣的一些問題。
圖 5.33 本體的資料庫混合存儲模式(據陳光儀,2009)
海洋信息網格技術與應用
續表
5.34 OWL 元素到 ebRIM 元素的映射(Dogac et al.,2004)
5.4.3.2 基於多分解策略的混合存儲模式實現
對知識庫以及服務語義注冊信息的存儲的實現上,本書在現有的研究成果的基礎上,結合本體組織構成及特點等實際需求,提出了一種基於多分解策略的混合關系資料庫存儲模式。
該方法的指導思想是: 先按類對其中的數據專題、數據模式、處理模型等進行類的分解,然後結合屬性的特性進行基於屬性的分解。其中基於類的分解中,可能粒度的大小不一,可能是一個類或者具有相關或相似的一些類劃分為一張表存儲; 而基於屬性的剖分,也並不是所有具有該屬性的類以一個表存儲,而可能是只針對一個類也單獨組織為一張表,其具體思路如下:
圖 5.35 經擴展的 ebRIM 高層模型圖(據樂鵬,2007)
(1)類的分解: 因為本研究的存儲模型不是為了實現一個通用的本體存儲模型,而是為了實現一個服務於海洋信息服務領域的本體存儲模型。海洋信息服務領域必然會牽涉到一些對象,比如對服務、模型、參數等對象,並且對這些對象的認識也基本上確定(也就是說這些對象類所具有的屬性及之間的關系基本明確),所以沒必要像上面幾種實現方案那樣因為不能預知都有哪些類,各類都有哪些屬性而將所有的實例的組織按垂直方式進行存儲,也沒有必要有一些表(比如獨立的屬性表,屬性的作用域和值域表等); 而有必要針對海洋信息服務領域內的這些類的信息內容獨立出一些表: 對於海洋專題,地理名實體、處理模型、數據模式等海洋信息檢索發現中常用的對象,則有必要進行分開存儲,否則必然使得結構不清晰,且檢索查詢效率低。
(2)對於專題、空間形態以及模型功效等只是簡單的分類系統,所具有的屬性少,而且今後存在派生新的種類的可能,因此必須具備一定的擴展性。針對這類數據。它們的存儲方式是(ClassID,ParentClassID,ClassType),其中 ClassType 標注本體類是屬於專題(比如 「海流」)或者其他。
(3)對於取值不唯一的屬性,且大部分類或實例都具有的屬性,則採用基於屬性的分解模式。比如對於別名屬性(hasAliasName),有可能一個類實例具有多個別名,這種情況下,則採取基於屬性的組織方式。該表的形式是:(OntologyID,AliasName),其中OntologyID 可以是本體類的 ID,也可以是本體實例的 ID,還可以是本體屬性的 ID,因為類、實例和屬性都可以有別名。
(4)對於復雜的屬性,採取大二進制存儲的方式。比如對於地名實例的空間覆蓋范圍,則不考慮其實際內部是包含多少個組成部分,統一按一個 shape 存儲在資料庫中。當然這里藉助了 ArcGIS 的 GDB 的 FeatureClass 矢量數據模型,並對於不同空間形態的則採用了多張表(點狀地名類、線狀地名類、面狀地名類),其組織方式是(GeoNameObjec-tID,shape)。同樣,對於模型本體中的內部流程本體,也採用了大二進制方式存儲,將整個流程 XML 描述文件,作為一個整體存放於欄位中,其大體組織方式為(ModelID,FlowXML)。
(5)本研究採用 ArcGIS 的 GeoDatabase 作為存儲模型。本體類(ontClass)的存儲結構如圖 5.36 所示,資料庫的總體組織結構如圖 5.37 所示。
圖 5.36 本體類(onClass)的存儲結構
⑩ 資料庫DBMS的主要組成部分是什麼各部分的主要功能是什麼
主要由:數據定義、數據操作、資料庫的運行管理、數據組織、存儲與管理、資料庫的保護、資料庫的維護、通信。
主要功能:
1、數據定義:供用戶定義資料庫的三級模式結構、兩級映像以及完整性約束和保密限制等約束。DDL主要用於建立、修改資料庫的庫結構。
2、數據操作:DBMS提供數據操作語言DML(Data Manipulation Language),供用戶實現對數據的追加、刪除、更新、查詢等操作。
3、資料庫的運行管理:資料庫的運行管理功能是DBMS的運行控制、管理功能,包括多用戶環境下的並發控制、安全性檢查和存取限制控制、完整性檢查和執行、運行日誌的組織管理、事務的管理和自動恢復,即保證事務的原子性。這些功能保證了資料庫系統的正常運行。
4、數據組織、存儲與管理:DBMS要分類組織、存儲和管理各種數據,包括數據字典、用戶數據、存取路徑等,需確定以何種文件結構和存取方式在存儲級上組織這些數據,如何實現數據之間的聯系。
5、資料庫的保護:資料庫中的數據是信息社會的戰略資源,所以數據的保護至關重要。DBMS對資料庫的保護通過4個方面來實現:資料庫的恢復、資料庫的並發控制、資料庫的完整性控制、資料庫安全性控制。
6、資料庫的維護:這一部分包括資料庫的數據載入、轉換、轉儲、資料庫的重組合重構以及性能監控等功能,這些功能分別由各個使用程序來完成。
7、通信:DBMS具有與操作系統的聯機處理、分時系統及遠程作業輸入的相關介面,負責處理數據的傳送。
(10)語義庫存儲擴展閱讀:
選擇資料庫管理系統時應從以下幾個方面予以考慮:
1、 構造資料庫的難易程度。
需要分析資料庫管理系統有沒有範式的要求,即是否必須按照系統所規定的數據模型分析現實世界,建立相應的模型;資料庫管理語句是否符合國際標准,符合國際標准則便於系統的維護、開發、移植;有沒有面向用戶的易用的開發工具;所支持的資料庫容量,資料庫的容量特性決定了資料庫管理系統的使用范圍。
2、 程序開發的難易程度。
有無計算機輔助軟體工程工具CASE——計算機輔助軟體工程工具可以幫助開發者根據軟體工程的方法提供各開發階段的維護、編碼環境,便於復雜軟體的開發、維護。
3、資料庫管理系統的性能分析。
包括性能評估(響應時間、數據單位時間吞吐量)、性能監控(內外存使用情況、系統輸入/輸出速率、SQL語句的執行,資料庫元組控制)、性能管理(參數設定與調整)。