更新時間:2021-08-25 10:34:12 來源:動力節(jié)點 瀏覽1221次
簡要說明
面向?qū)ο蟮臄?shù)據(jù)庫 (OOD) 是一種數(shù)據(jù)庫系統(tǒng),它可以處理復(fù)雜的數(shù)據(jù)對象,即反映面向?qū)ο缶幊陶Z言中使用的對象的對象。
在面向?qū)ο缶幊讨校磺卸际菍ο?,很多對象都相?dāng)復(fù)雜,具有不同的屬性和方法。面向?qū)ο蟮臄?shù)據(jù)庫管理系統(tǒng)與面向?qū)ο蟮木幊陶Z言協(xié)同工作,以促進(jìn)面向?qū)ο髷?shù)據(jù)的存儲和檢索。
你可能會想,“等等,我一直在我的編程中使用對象。我使用數(shù)據(jù)庫。那么,這是否意味著我使用的數(shù)據(jù)庫是OOD?” 可能不會,原因與 OOD 的主要特性之一有關(guān):對象數(shù)據(jù)持久性。
當(dāng)你的程序運(yùn)行時,你可能有一個對象——例如,一個task. 該對象具有類似 aname和 的屬性status。它可能還有一些方法,例如update_task()或get_task_history()。在程序早期的某個地方,您初始化了該task對象,現(xiàn)在您可以訪問它,因為它存儲在內(nèi)存中。
當(dāng)您的程序終止執(zhí)行時會發(fā)生什么?你的對象……不見了。該數(shù)據(jù)對象是瞬態(tài)的,而不是持久的。下次程序啟動時,您需要重新從數(shù)據(jù)庫中檢索這些數(shù)據(jù)值(如name和status)以初始化新的 task對象實例。
使用 OOD,數(shù)據(jù)對象及其所有屬性都存儲在數(shù)據(jù)庫中。當(dāng)您的程序終止時,對象將繼續(xù)存在,并存儲在 OOD 中。當(dāng)您的程序再次啟動時,它可以從數(shù)據(jù)庫中檢索具有屬性的對象。使用 OOD 存儲和檢索復(fù)雜數(shù)據(jù)對象的過程對數(shù)據(jù)庫用戶是透明的。
這與關(guān)系數(shù)據(jù)庫(如 MySQL 或 SQLite)有很大不同,但與文檔數(shù)據(jù)庫(如 MongoDB)沒有太大區(qū)別。在關(guān)系數(shù)據(jù)庫中,開發(fā)人員需要從一組查詢的結(jié)果中組合一個對象,而在文檔數(shù)據(jù)庫中,文檔字段到類屬性的映射應(yīng)該幾乎是透明的。
OOD 已經(jīng)存在了幾十年。MongoDB Realm是該領(lǐng)域最有前途的新軟件之一。
MongoDB 確實提供了一個名為 Realm Mobile Database 的 OOD,其中查詢語言通過您使用的 SDK 構(gòu)建本機(jī)對象。例如,在 javascript SDK 中,對象獲取類似于:
const myTask = realm.objectForPrimaryKey("Task", 12345);
OOD 最常用于面向?qū)ο蟮木幊陶Z言,如 Java、Kotlin、C#、Node JS (React) 和 Swift。使用 OOD 的行業(yè)通常是那些建立在面向?qū)ο蟮恼Z言上并且希望在處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)的同時提高生產(chǎn)力的行業(yè)。
OOD 的一個很好的例子是在線 IT 培訓(xùn)提供商 CBT Nuggets。CBT Nuggets使用 Realm 提供 5,000 多門課程,從基本的計算機(jī)技能到復(fù)雜的網(wǎng)絡(luò)管理(請參閱此案例研究)。CBT Nuggets 致力于確保訂閱者可以隨時隨地查看內(nèi)容。為實現(xiàn)這一承諾,課程通過 10 到 20 分鐘“金塊”的流媒體視頻提供。內(nèi)容可在桌面和移動應(yīng)用程序上使用。
借助 Realm 移動數(shù)據(jù)庫和 MongoDB Realm Sync,CBT 能夠使用適用于 Android 和 iOS 設(shè)備的跨平臺 SDKS 進(jìn)行開發(fā),使用直接對象到業(yè)務(wù)類映射和與 MongoDB Atlas 的無縫同步。
OODM 的要素是:
對象:現(xiàn)實世界的實體,例如待辦事項列表中的特定生活任務(wù)—— “把垃圾拿出來”。
屬性和方法:對象具有狀態(tài)和行為。對象具有的屬性(其也可以被稱為屬性)等name,status和create_date。集合在一起的屬性集表示它的狀態(tài)。除此之外,對象還具有修改或操作其屬性的行為(也稱為方法、操作或函數(shù)),例如update_task()或get_task_history()。
類:具有相同屬性和行為的所有對象的分組形成一個類。在上面的示例中,我們討論了task對象。這些對象一起都屬于這個Task類。
class task
{
String name;
String status;
Date create_date;
public void update_task(String status)
{
...
}
}
面向?qū)ο蟮脑O(shè)計模式:面向?qū)ο蟮臄?shù)據(jù)建模還暗示了某些原則,如繼承、多態(tài)、覆蓋和關(guān)聯(lián)。面向?qū)ο蟮臄?shù)據(jù)庫系統(tǒng)將支持這些相同的概念。
流行的 NoSQL 數(shù)據(jù)庫(如 MongoDB 和 AWS DynamoDB)是面向文檔的數(shù)據(jù)庫,而其他(如 Casadra)則是鍵值存儲。文檔數(shù)據(jù)庫,如 OOD,在表、行和列方面不起作用;但是某些語言可能需要 ODM 才能更好地處理對象。
每個“記錄”都被視為一個文檔,它可以根據(jù)它為給定實體存儲的屬性縮小和增長。有時,文檔之間的關(guān)系可能是首選方法。
例如,您可以認(rèn)為一個BlogPost文檔與多個Comment文檔和Like文檔有關(guān)聯(lián)。在其他時候,關(guān)系可以直接嵌入到文檔中。在這種情況下,您可以想象一個BlogPost文檔的Comments屬性是一個文本字符串和用戶名數(shù)組,然后另一個Likes屬性是一個用戶名和時間戳數(shù)組。
文檔數(shù)據(jù)庫提供靈活的結(jié)構(gòu),可以很好地水平擴(kuò)展。它們在存儲非常復(fù)雜的文檔方面非常強(qiáng)大,從表面上看,它們似乎與對象相同——許多現(xiàn)代編程語言通過將這些文檔稱為“對象”來進(jìn)一步混淆 MongoDB。然而,這些文檔并不是如上所述的面向?qū)ο缶幊痰膫鹘y(tǒng)意義上的對象。
文檔數(shù)據(jù)庫與面向?qū)ο蟮臄?shù)據(jù)庫類似但又不一樣。
以上就是動力節(jié)點小編介紹的"面向?qū)ο髷?shù)據(jù)庫系統(tǒng)的示例",希望對大家有幫助,想了解更多可查看Java教程。動力節(jié)點在線學(xué)習(xí)教程,針對沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識,讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。

初級 202925

初級 203221

初級 202629

初級 203743