原創(chuàng)|大數(shù)據(jù)新聞|編輯:況魚杰|2020-12-02 11:19:09.307|閱讀 410 次
概述:如果你一直在使用數(shù)據(jù)庫,你就會(huì)知道NoSQL是熱門話題。主要是因?yàn)镹oSQL在很大程度上填補(bǔ)了SQL相當(dāng)難以填補(bǔ)的空白。傳統(tǒng)上,SQL數(shù)據(jù)庫的成本往往很高,從其只能垂直擴(kuò)展,到數(shù)據(jù)庫還沒做出來就需要對模式進(jìn)行大量的設(shè)計(jì)。因此,NoSQL就是為了對抗SQL而開發(fā)的,它可以水平擴(kuò)展,也不需要使用Schema,但是是不是真的不需要Schema呢?本來就來探討一下。?
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
如果你一直在使用數(shù)據(jù)庫,你就會(huì)知道NoSQL是熱門話題。主要是因?yàn)镹oSQL在很大程度上填補(bǔ)了SQL相當(dāng)難以填補(bǔ)的空白。傳統(tǒng)上,SQL數(shù)據(jù)庫的成本往往很高,從其只能垂直擴(kuò)展,到數(shù)據(jù)庫還沒做出來就需要對模式進(jìn)行大量的設(shè)計(jì)。因此,NoSQL就是為了對抗SQL而開發(fā)的,它可以水平擴(kuò)展,也不需要使用Schema,但是是不是真的不需要Schema呢?本來就來探討一下。
對于很多剛進(jìn)入NoSQL的人來說,他們會(huì)被 "不需要SQL "和 "無Schema "這樣的流行語所吸引,但卻往往看不到森林中的樹木。雖然NoSQL確實(shí)是作為對SQL的回應(yīng)而產(chǎn)生的,但它并不是作為一種替代,而是作為一種增強(qiáng)和補(bǔ)充的方式。更具體地說,這種無模式意味著NoSQL是非常靈活的,可以用大量不同的NoSQL數(shù)據(jù)模型來存儲數(shù)據(jù)。
不過這并不意味著NoSQL不能使用Schema,畢竟,NoSQL的數(shù)據(jù)可以是丑陋的、隨機(jī)的、混亂的、無限重復(fù)的(SQL是專門為了路由出重復(fù)的數(shù)據(jù)而做的,而NoSQL沒有)。因此,除非整個(gè)流水線只由計(jì)算機(jī)處理(不會(huì)的,因?yàn)閿?shù)據(jù)科學(xué)并不完美),否則有一個(gè)Schema肯定是有用的。
由于NoSQL非常適合擴(kuò)展性,所以在方案設(shè)計(jì)上主要考慮的可能是數(shù)據(jù)模型的可擴(kuò)展性和性能。特別強(qiáng)調(diào)優(yōu)化數(shù)據(jù)訪問,而數(shù)據(jù)訪問最終往往會(huì)非常依賴查詢。因此,NoSQL中的Schema設(shè)計(jì)重點(diǎn)是規(guī)劃專門配合工作流的鍵和索引,以便快速高效。
當(dāng)然,選擇主鍵或決定哪些字段應(yīng)該被索引有幾種方法。對于這一點(diǎn),你一定要考慮用戶是如何處理或?qū)⒁幚頂?shù)據(jù)的。回顧以前的查詢可以給你一個(gè)很好的提示,讓你知道用戶日常是如何使用數(shù)據(jù)庫的,并很好地作為一個(gè)啟動(dòng)點(diǎn)。這種查詢驅(qū)動(dòng)的設(shè)計(jì)一般至少需要包含業(yè)務(wù)數(shù)據(jù)實(shí)體、用戶需求和規(guī)范,最后是所述用戶的查詢Schema(如果存在此類數(shù)據(jù))。
一旦你有了這些基本的成分,你就可以開始設(shè)計(jì)模式了,一個(gè)很好的起點(diǎn)就是設(shè)計(jì)NoSQL數(shù)據(jù)庫的自定義、類似表的結(jié)構(gòu)。對于這一步,重要的是要在編寫一個(gè)服務(wù)于單一功能的代碼和可以滿足多個(gè)功能的代碼之間找到一個(gè)平衡點(diǎn)。畢竟,即使是NoSQL,幫助降低開銷也是很重要的一步。
最后一點(diǎn)需要對數(shù)據(jù)進(jìn)行去正常化,因?yàn)檫@對任何NoSQL Schema設(shè)計(jì)都是必不可少的。雖然這不一定是一門精確的科學(xué),但兩種最好的方法是通過引用或嵌入來實(shí)現(xiàn)數(shù)據(jù)的去正常化。這樣就可以實(shí)現(xiàn)1:1、1:N或M-N關(guān)系等核心設(shè)計(jì)模式。
在確定了這些之后,下一步就是設(shè)計(jì)主鍵。但是因?yàn)槊總€(gè)NoSQL數(shù)據(jù)庫的架構(gòu)都是不同的,了解每個(gè)架構(gòu)如何實(shí)現(xiàn)其主鍵是這一步的根本,所以這里就不詳細(xì)解釋了。最后,你需要設(shè)計(jì)索引,和上面的步驟類似,根據(jù)你使用的NoSQL數(shù)據(jù)庫不同,它的差別很大。盡管如此,有幾個(gè)設(shè)計(jì)概念你應(yīng)該考慮。
創(chuàng)建一個(gè)合并的屬性列表作為查詢的謂詞,可以幫助你設(shè)計(jì)更高效的索引。當(dāng)然,你應(yīng)該避免創(chuàng)建過于細(xì)化的索引,因?yàn)槟侵粫?huì)降低效率。
對于上面的觀點(diǎn),只有當(dāng)數(shù)組中的所有屬性都需要時(shí),才應(yīng)該設(shè)計(jì)數(shù)組索引。如果你計(jì)劃進(jìn)行索引,保持?jǐn)?shù)組大小最小化是至關(guān)重要的(在數(shù)據(jù)類型復(fù)雜的索引上應(yīng)避免使用特殊索引)。
鑒于NoSQL的靈活性傾向,對Schema進(jìn)行更改是很容易的,而且基本上會(huì)導(dǎo)致終身設(shè)計(jì)和實(shí)現(xiàn)Schema更改的過程。這在剛開始的時(shí)候聽起來可能是個(gè)苦差事,但最終當(dāng)你在幾年后意識到需要做一個(gè)非常重要的改變時(shí),就會(huì)變得很好。NoSQL在沒有Schema的情況下單獨(dú)離開往往會(huì)導(dǎo)致無政府狀態(tài),因此創(chuàng)建某種形式的Schema是有用的。你不必這樣做,特別是對于小規(guī)模的應(yīng)用,但不要以為走NoSQL路線就可以不用創(chuàng)建Schema了。
慧都數(shù)倉建模大師能夠快速、高效地幫助客戶搭建數(shù)據(jù)倉庫供企業(yè)決策分析之用。滿足數(shù)據(jù)需求效率、數(shù)據(jù)質(zhì)量、擴(kuò)展性、面向主題等特點(diǎn)。基于企業(yè)的業(yè)務(wù)目標(biāo),進(jìn)行數(shù)據(jù)理解、數(shù)據(jù)準(zhǔn)備、數(shù)據(jù)建模,最后進(jìn)行評價(jià)和部署,真正實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)業(yè)務(wù)決策。更多詳情,請。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn