成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用模式構(gòu)建系列總結(jié)

he_xd / 3322人閱讀

摘要:在學(xué)習(xí)更多關(guān)于的知識(shí)和技能現(xiàn)在到了我們總結(jié)使用模式構(gòu)建系列的時(shí)候,這是一個(gè)很好的機(jī)會(huì)回顧一下這個(gè)系列涵蓋的模式所解決的問(wèn)題,并著重復(fù)習(xí)每個(gè)模式所具有的一些好處以及做出的權(quán)衡。長(zhǎng)期關(guān)注分布式系統(tǒng)及通用型數(shù)據(jù)庫(kù)技術(shù)。

在MongoDB University
學(xué)習(xí)更多關(guān)于MongoDB的知識(shí)和技能

現(xiàn)在到了我們總結(jié)使用模式構(gòu)建系列的時(shí)候,這是一個(gè)很好的機(jī)會(huì)回顧一下這個(gè)系列涵蓋的模式所解決的問(wèn)題,并著重復(fù)習(xí)每個(gè)模式所具有的一些好處以及做出的權(quán)衡。關(guān)于模式設(shè)計(jì),最常見的問(wèn)題是“我正在設(shè)計(jì)一個(gè)要做某某事情的應(yīng)用程序,如何對(duì)數(shù)據(jù)建模?”正如我們希望你在學(xué)習(xí)本系列過(guò)程中可以體會(huì)到的那樣,要回答這個(gè)問(wèn)題,需要考慮很多事情。不過(guò)我們提供了一個(gè)應(yīng)用場(chǎng)景示例圖,這至少有助于為通用的數(shù)據(jù)建模提供一些初級(jí)的指導(dǎo)。

應(yīng)用場(chǎng)景示例

下圖是我們?cè)谂c客戶合作多年后發(fā)現(xiàn)的用于各種應(yīng)用程序中設(shè)計(jì)模式的指導(dǎo)原則。對(duì)于哪種設(shè)計(jì)模式可以用于某類特定的應(yīng)用程序不是“一成不變”的。你需要仔細(xì)查看用例中經(jīng)常使用的那些,但是不要忽略其它的,它們可能仍然適用。如何設(shè)計(jì)應(yīng)用程序的數(shù)據(jù)模式非常依賴于數(shù)據(jù)訪問(wèn)的方式。

設(shè)計(jì)模式總結(jié)

近似值

近似值模式適用于當(dāng)昂貴的計(jì)算很頻繁,而這些計(jì)算的精度要求通常不是首要考慮的時(shí)候。

優(yōu)點(diǎn)
? 對(duì)數(shù)據(jù)庫(kù)更少的寫入
? 保持在統(tǒng)計(jì)學(xué)上有效的數(shù)字
缺點(diǎn)
? 無(wú)法展示精確的數(shù)字
? 需要在應(yīng)用層實(shí)現(xiàn)

屬性

屬性模式適用于解決這樣一類問(wèn)題:我們有一些大文檔,它們有很多相似的字段,而這些字段的一個(gè)子集具有共同的特征,我們希望對(duì)該子集字段進(jìn)行排序或查詢。當(dāng)需要排序的字段只能在一小部分文檔中找到。或者在文檔中同時(shí)滿足這兩個(gè)條件時(shí)。

優(yōu)點(diǎn)
? 需要更少的索引
? 查詢變得更容易編寫,而且通常更快

分桶

當(dāng)需要管理流式數(shù)據(jù),如時(shí)間序列、實(shí)時(shí)分析或物聯(lián)網(wǎng)(IOT)應(yīng)用程序時(shí),分桶模式是一個(gè)很好的解決方案。

優(yōu)點(diǎn)
? 減少了集合中的文檔總數(shù)
? 提高了索引性能
? 可以通過(guò)預(yù)聚合簡(jiǎn)化數(shù)據(jù)的訪問(wèn)

計(jì)算

當(dāng)數(shù)據(jù)訪問(wèn)模式為讀取密集型并且應(yīng)用程序需要重復(fù)計(jì)算這些數(shù)據(jù)時(shí),計(jì)算模式是一個(gè)很好的選項(xiàng)。

優(yōu)點(diǎn)
? 對(duì)于頻繁的計(jì)算可以減少CPU的工作負(fù)載
? 查詢變得更容易編寫,而且通常更快
缺點(diǎn)
? 識(shí)別出需要使用此模式的的場(chǎng)景可能比較困難
? 除非必要,請(qǐng)勿過(guò)度使用此模式

文檔版本控制

當(dāng)你需要在MongoDB中維護(hù)以前版本的文檔時(shí),文檔版本控制模式是一種可行的解決方案。

優(yōu)點(diǎn)
? 容易實(shí)現(xiàn),即使是在現(xiàn)存的系統(tǒng)中
? 在最新版本上進(jìn)行請(qǐng)求時(shí),沒(méi)有性能上的影響
缺點(diǎn)
? 寫操作的數(shù)量會(huì)翻倍
? 請(qǐng)求需要被定位到正確的集合

擴(kuò)展引用

當(dāng)你的應(yīng)用程序使用了大量的JOIN操作來(lái)將頻繁訪問(wèn)的數(shù)據(jù)集中在一起時(shí),你會(huì)發(fā)現(xiàn)擴(kuò)展引用模式非常有用。

優(yōu)點(diǎn)
? 當(dāng)有大量的JOIN操作時(shí)可以提升性能
? 讀操作會(huì)更快,并且可以減少JOIN操作的數(shù)量
缺點(diǎn)
? 會(huì)有重復(fù)數(shù)據(jù)

異常值

你是否發(fā)現(xiàn)有一些查詢或文檔和其它典型數(shù)據(jù)的模式不一樣?這些例外情況是否驅(qū)動(dòng)了你應(yīng)用程序的解決方案?如果是這樣,那么異常值模式就是解決這種情況的一個(gè)很好的方法。

優(yōu)點(diǎn)
? 防止整個(gè)應(yīng)用的解決方案被某些個(gè)別的文檔或請(qǐng)求所左右
? 請(qǐng)求會(huì)針對(duì)那些典型的用例進(jìn)行優(yōu)化,而異常值仍將得到處理
缺點(diǎn)
? 通常會(huì)為特定的查詢而進(jìn)行定制,因此一些臨時(shí)產(chǎn)生的查詢可能性能不太理想
? 此模式的大部分工作是在應(yīng)用程序代碼中完成的

預(yù)分配

當(dāng)你事先知道文檔的結(jié)構(gòu),而應(yīng)用程序只需要用數(shù)據(jù)填充它時(shí),預(yù)分配模式是正確的選擇。

優(yōu)點(diǎn)
? 當(dāng)預(yù)先知道文檔結(jié)構(gòu)時(shí),可以簡(jiǎn)化設(shè)計(jì)
缺點(diǎn)
? 簡(jiǎn)單和性能之間的權(quán)衡

多態(tài)

當(dāng)有多種文檔它們的相似性比差異更多,并且需要將這些文檔保存在同一個(gè)集合中時(shí),多態(tài)模式是一種解決方案。

優(yōu)點(diǎn)
? 實(shí)現(xiàn)簡(jiǎn)單
? 查詢可以在單個(gè)集合中運(yùn)行

模式版本控制

幾乎每個(gè)應(yīng)用程序都可以從模式版本控制模式中獲益,因?yàn)閿?shù)據(jù)模式的更改經(jīng)常發(fā)生在應(yīng)用程序的生命周期中。此模式允許歷史版本和當(dāng)前版本的文檔在集合中同時(shí)存在。

優(yōu)點(diǎn)
? 不需要停機(jī)時(shí)間
? 模式遷移可控
? 減少未來(lái)的技術(shù)債務(wù)
缺點(diǎn)
? 在遷移過(guò)程中,對(duì)相同的字段可能需要兩個(gè)索引

子集

子集模式解決了有大量數(shù)據(jù)的大文檔沒(méi)有被應(yīng)用程序使用而導(dǎo)致的工作集超過(guò)RAM容量的問(wèn)題。

優(yōu)點(diǎn)
? 在總體上減小了工作集的大小
? 縮短了最常用數(shù)據(jù)的磁盤訪問(wèn)時(shí)間
缺點(diǎn)
? 必須管理子集
? 請(qǐng)求附加的數(shù)據(jù)需要額外的數(shù)據(jù)庫(kù)訪問(wèn)

樹形

當(dāng)數(shù)據(jù)是分層結(jié)構(gòu)并且經(jīng)常被查詢時(shí),樹形模式就是你要使用的。

優(yōu)點(diǎn)
? 通過(guò)避免多次JOIN操作提高了性能
缺點(diǎn)
? 需要在應(yīng)用層管理圖的更新

結(jié)論

正如我們希望你在本系列文章中看到的,MongoDB文檔模型在如何建模數(shù)據(jù)方面提供了很大的靈活性。這種靈活性是非常強(qiáng)大的,但是這種能力需要根據(jù)應(yīng)用程序的數(shù)據(jù)訪問(wèn)模式去駕馭利用。MongoDB中的模式設(shè)計(jì)對(duì)應(yīng)用程序的性能有著巨大的影響。我們發(fā)現(xiàn)性能問(wèn)題常常可以追溯到糟糕的模式設(shè)計(jì)。

請(qǐng)記住,為了進(jìn)一步增強(qiáng)文檔模型的能力,這些設(shè)計(jì)模式在合理的情況下可以一起使用。例如,隨著應(yīng)用程序的發(fā)展,模式版本控制可以與任何其它模式一起使用。學(xué)習(xí)完已經(jīng)介紹的十二種設(shè)計(jì)模式,你已經(jīng)擁有了利用文檔模型強(qiáng)大的靈活性所需的工具和知識(shí)。

精彩內(nèi)容

利用模式進(jìn)行構(gòu)建第一講——多態(tài)模式

利用模式進(jìn)行構(gòu)建第二講——屬性模式

利用模式進(jìn)行構(gòu)建第三講——桶模式

利用模式進(jìn)行構(gòu)建第四講——異常值模式

利用模式進(jìn)行構(gòu)建第五講——計(jì)算模式

利用模式進(jìn)行構(gòu)建第六講——子集模式

利用模式進(jìn)行構(gòu)建第七講——擴(kuò)展引用模式

利用模式進(jìn)行構(gòu)建第八講——近似值模式

利用模式進(jìn)行構(gòu)建第九講——樹形模式

利用模式進(jìn)行構(gòu)建第十講——預(yù)分配模式

利用模式進(jìn)行構(gòu)建第十一講——文檔版本控制模式

譯者:牟天壘

野生程序員一枚。

長(zhǎng)期關(guān)注分布式系統(tǒng)及通用型數(shù)據(jù)庫(kù)技術(shù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19558.html

相關(guān)文章

  • 前端每周清單半年盤點(diǎn)之 Angular 篇

    摘要:延伸閱讀學(xué)習(xí)與實(shí)踐資料索引與前端工程化實(shí)踐前端每周清單半年盤點(diǎn)之篇前端每周清單半年盤點(diǎn)之與篇前端每周清單半年盤點(diǎn)之篇 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡迎關(guān)注【前端之巔】微信公眾號(hào)(ID:frontshow),及時(shí)獲取前端每周清單;本文則是對(duì)于半年來(lái)發(fā)布的前端每周清單...

    LeviDing 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式系列三:建造者模式

    摘要:優(yōu)點(diǎn)建造者模式的封裝性很好,對(duì)象本身與構(gòu)建過(guò)程解耦。建造者模式很容易進(jìn)行擴(kuò)展。適用場(chǎng)景需要生成的對(duì)象具有復(fù)雜得內(nèi)部結(jié)構(gòu)且內(nèi)部屬性本身相互依賴建造者模式的代碼實(shí)現(xiàn)建造者模式主要有個(gè)部分產(chǎn)品類建造者類指揮者類客戶。建造者完成相應(yīng)的部分。 建造者模式 建造者模式(builder pattern)比較簡(jiǎn)單,它屬于創(chuàng)建型模式的一種,將一個(gè)復(fù)雜的對(duì)象分解成多個(gè)簡(jiǎn)單的對(duì)象來(lái)進(jìn)行構(gòu)建,將復(fù)雜的構(gòu)建層與...

    CloudDeveloper 評(píng)論0 收藏0
  • 設(shè)計(jì)模式之建造者設(shè)計(jì)模式

    摘要:本質(zhì)建造者設(shè)計(jì)模式分離了對(duì)象子組件的構(gòu)造過(guò)程和組裝過(guò)程,實(shí)現(xiàn)了構(gòu)建與組裝的解耦,不同的構(gòu)建器相同的組裝順序以及相同的構(gòu)建器不同的組裝順序都可以創(chuàng)建出不同的對(duì)象,使得構(gòu)建與組裝充分解耦,進(jìn)而實(shí)現(xiàn)構(gòu)建算法與組裝算法的解耦,從而實(shí)現(xiàn)更好的復(fù)用。 這是設(shè)計(jì)模式系列的第二篇——建造者設(shè)計(jì)模式,我希望推送的文章是一個(gè)系列的,盡量保持一樣的寫作風(fēng)格,盡量把我理解的闡述清楚,關(guān)于建造者設(shè)計(jì)模式主要從以...

    wangxinarhat 評(píng)論0 收藏0
  • 前端每周清單半年盤點(diǎn)之 React 與 ReactNative 篇

    摘要:前端每周清單半年盤點(diǎn)之與篇前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。與求同存異近日,宣布將的構(gòu)建工具由遷移到,引發(fā)了很多開發(fā)者的討論。 前端每周清單半年盤點(diǎn)之 React 與 ReactNative 篇 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為...

    Barry_Ng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<