2013-11-28 35 views
0

我正試圖設計一個數據庫表,每15分鐘將會面對30,000個插入。所以這張桌子將面臨數百萬個插入。如何配置/設計每隔15分鐘插入30,000個表格?

的試樣臺是作爲後續

CREATE TABLE `cdr` (`id` bigint(20) NOT NULL AUTO_INCREMENT, 
       `dataPacketDownLink` bigint(20) DEFAULT NULL, 
       `dataPacketUpLink` bigint(20) DEFAULT NULL, 
       `dataPlanEndTime` datetime DEFAULT NULL, 
       `dataPlanStartTime` datetime DEFAULT NULL, 
       `dataVolumeDownLink` bigint(20) DEFAULT NULL, 
       `dataVolumeUpLink` bigint(20) DEFAULT NULL, 
       `dataplan` varchar(255) DEFAULT NULL, 
       `dataplanType` varchar(255) DEFAULT NULL, 
       `createdOn` datetime DEFAULT NULL, 
       `deviceName` varchar(500) DEFAULT NULL, 
       `duration` int(11) NOT NULL, 
       `effectiveDuration` int(11) NOT NULL, 
       `hour` int(11) DEFAULT NULL, 
       `eventDate` datetime DEFAULT NULL, 
       `msisdn` bigint(20) DEFAULT NULL, 
       `quarter` int(11) DEFAULT NULL, 
       `validDays` int(11) DEFAULT NULL, 
       `dataLeft` bigint(20) DEFAULT NULL, 
       `completedOn` datetime DEFAULT NULL, 
      PRIMARY KEY (`id`), 
      KEY `msisdn_index` (`msisdn`), 
      KEY `eventdate_index` (`eventDate`) 
     ) ENGINE=MyISAM AUTO_INCREMENT=55925171 DEFAULT CHARSET=latin1; 

我怎樣才能檢索記錄,如果使用比較> =在日期欄的情況下(導致數以百萬計的記錄)。 所以請幫我設計這樣的表格,這樣我就可以在不影響插入操作的情況下使用優化的選擇語句(很多索引在插入數百萬條記錄後產生問題)。 謝謝。

+1

我真的會盡量避免使用MyISAM引擎。如果在其中一個大插入過程中發生某些事情,表格中沒有日誌,並且可能最終以不可恢復的方式加密。 – tadman

回答

1

一個簡短的回答:

  1. 決定如何你想保留的歷史。

  2. 使用InnoDB引擎。

  3. 使用分區可以輕鬆快速地管理塊中的數據。

  4. 實現當前窗口分區 - 爲當前集合和一個或多個表格分檔並將分區移動到較早的表格。

  5. 爲了獲得最快的寫入性能 - 刪除所有索引和約束。在所有數據加載完成後投射它們。如果數據插入沒有壓力 - 離開他們,但知道什麼是懲罰。

  6. 確保您的服務器可以處理如此多的連接/數據量。隨着硬件升級花費大量時間,計劃未來2 - 3年。

  7. 做負載測試,包括超載 - 知道你的限制。

並繼續研究。

+0

hii stoleg, >使用分區來管理數據並刪除所有索引和約束。 分區也需要唯一的密鑰約束,在這種情況下我能做些什麼?而且我也必須從這張表中讀取需要索引的數據。那麼我怎麼設計呢? 我已閱讀其他頁面的利益流,人們有400百萬記錄的表,他們正在管理它。但是我沒有資格在那裏發表評論,所以我可以問他們:( – Aamir

+1

是的,你可以管理10億條記錄,告訴你更多關於表的使用情況,你可以考慮使用這種查詢方式。這些記錄出現在查詢表中的某些延遲;或者創建一個單獨的repoting表,其中包含最多或最近/最常需要的信息,以限制查詢的行數,但需要花費額外的磁盤空間和時間。 – Stoleg

+0

查詢 - select c .msisdn,sum(c.dataVolumeDownLink + c.dataVolumeUpLink)as datasum from cdr c where c.eventDate> ='date_var'group by c.msisdn order by datasum desc; 大部分問題與eventdate相比較,所以告訴我應該怎麼做我做分段或報告表格,或者隨着這個小小的改變一起去。 – Aamir

相關問題