新聞中心
mysql表數(shù)據(jù)量太大,達到了1億多條數(shù)據(jù),除了分庫分表之外,還有沒有其他的解決方式?
軟件設(shè)計表數(shù)據(jù)量太大這個是架構(gòu)設(shè)計里,常遇到的問題。

哈爾濱網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,哈爾濱網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為哈爾濱1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的哈爾濱做網(wǎng)站的公司定做!
先考慮優(yōu)化,讀寫分離、合理索引、緩存數(shù)據(jù)、高頻讀取寫進redis等產(chǎn)品,也可以買非常多的實例來做負(fù)載,不過這些操作撐不了多久。 分庫分表幾乎是唯一的,也是最好的辦法。
當(dāng)然分庫分表大家不愿意操作,主要還是因為要改動業(yè)務(wù)代碼,還有一種傻瓜式操作,不需要你改業(yè)務(wù)代碼,那就是分區(qū),例如你把數(shù)據(jù)一個月分一個區(qū),數(shù)據(jù)庫 mysql 單表數(shù)據(jù)量達到千萬、億級,可以通過分表與表分區(qū)提升服務(wù)性能。
不過你說不想分庫分表,那就拿錢抗啊,上商業(yè)數(shù)據(jù)庫,Oracle、DB2、PGSQL等,即使上這些數(shù)據(jù)庫,你遲早還是得根據(jù)業(yè)務(wù)分庫分表,這個你可以問下頭條,淘寶,知乎這些大量數(shù)據(jù)的工程師,長期下去分庫,分表是唯一出入。
你看京東,淘寶你的訂單數(shù)據(jù)就知道了,默認(rèn)顯示三個月, 有可能他們就是定義最近三個月為熱數(shù)據(jù),當(dāng)前常用庫,之前你的訂單在歷史數(shù)據(jù)庫里面。這樣的好處,顯而易見的,你的系統(tǒng)查詢速度最大的影響因素,就是數(shù)據(jù)量。
很高興能夠看到和回答這個問題,作為一個悟空問答愛好者,我每天都在關(guān)注各個方面的消息,每天收獲也蠻多的。下面我將根據(jù)自己的經(jīng)驗認(rèn)真回答這個問題。
MySQL是世界上最受歡迎的開源數(shù)據(jù)庫。憑借其經(jīng)過驗證的性能,可靠性和易用性,MySQL已成為基于Web的應(yīng)用程序的領(lǐng)先數(shù)據(jù)庫選擇,被包括Facebook,Twitter,You Tube,Yahool等在內(nèi)的知名Web財產(chǎn)所使用。
Oracle推動MySQL創(chuàng)新,提供了支持下一代Web,云服務(wù),移動和嵌入式應(yīng)用程序的新功能。MysQL是數(shù)據(jù)庫的相對控制系統(tǒng)。它將數(shù)據(jù)存儲在不同的表中,而不是存儲空間較廣,從而提高了速度和靈活性。
MySQL是最常用的訪問數(shù)據(jù)庫的語言。根據(jù)雙因素認(rèn)證政策,MySQL軟件開發(fā)分為社區(qū)版和商業(yè)版。功率大、速度快、規(guī)模小、成本低,特別是使用開源數(shù)據(jù)庫,因為整個網(wǎng)站都是選用MySQL。
例如,MysQL為中小企業(yè)提供了比Oracle、DB2、SQL Server、SQL Server等個人用戶更多的機會。由于MySQL是開源軟件,這可能會大大降低整體成本。
Linux是操作系統(tǒng),Apache或Nginx是Web服務(wù)器,MySQL是數(shù)據(jù)庫,PHP/Perl/python是服務(wù)器解釋器。由于這四種軟體都是免費或免費(FLOSS)的,所以應(yīng)用這種方法可以不計成本地建立一個穩(wěn)定的免費網(wǎng)絡(luò)系統(tǒng)LAMP或LNMP。
mysql數(shù)據(jù)庫本身是非常靈活的,這就導(dǎo)致了性能上的不足,嚴(yán)重依賴開發(fā)人員的能力。這就意味著開發(fā)人員的技術(shù)要高,mysql的性能要高。這也與很多數(shù)據(jù)庫類型有關(guān),所以dba的工資通常較高。
為了避免表字段出現(xiàn)空值,空值難以優(yōu)化,而且占用額外的索引空間,默認(rèn)值為0,而不是空值。
思路一:
思路二、修改索引:
在做垂直拆分或者水平擴展的時候,要大概清楚2億條數(shù)據(jù)庫是都經(jīng)常性進行大規(guī)模的查詢還是更新?這決定了你擴展的思路,如果是范范的進行擴展,有時候會起到適得其反的效果。
1.首先要檢查哪些經(jīng)常查詢的SQL是否可以有優(yōu)化的地方,檢查數(shù)據(jù)庫的索引建立的是否合理,索引是否有效,可以嘗試建立分區(qū)表等,這一步主要是單個數(shù)據(jù)庫的優(yōu)化。
2.在mysql的擴展上包括垂直拆分,即分庫分表的,這種需求需要在代碼層實現(xiàn),需要開發(fā)人員在代碼層進行一些配置。這個可以起到寫的負(fù)載均衡。而水平擴展說白一點就是增加服務(wù)器的個數(shù),由原來的一臺變成幾臺,再通過mysql的中間件,比如proxysql或者mycat進行一些配置(推薦proxysql),把寫請求放在那些性能好的服務(wù)器上,把讀分散到不同的服務(wù)器上,這樣就起到了讀的負(fù)載均衡。
3.如果上面垂直拆分或者水平擴展還是不能解決問題,可以考慮使用nosql,在前端增加一個緩存,memory cache或者redis來增加緩存,應(yīng)用層在首先會讀取redis里的數(shù)據(jù),如果沒有才會往MySQL里去讀,當(dāng)然你的查詢不能是太過復(fù)雜的查詢。個人推薦redis,畢竟它可以磁盤落地化。
綜上所述,應(yīng)該可以解決問題。當(dāng)然這里只是提供思路,沒有一種方案是完美的,都需要根據(jù)需求去定制。
到此,以上就是小編對于mongodb查看表結(jié)構(gòu)的問題就介紹到這了,希望這1點解答對大家有用。
文章名稱:mongodb如何查表結(jié)構(gòu)
鏈接URL:http://fisionsoft.com.cn/article/cceehoj.html


咨詢
建站咨詢
