簡體   English   中英

使用大型(數千萬行)數據集

[英]Working with large (tens of millions of rows) datasets

對於簡單的Web應用程序,主要要求是盡可能快地處理大約30(10m * 3表)百萬條記錄。 我之前沒有處理過這么多數據,所以想要有經驗的人提出一些建議/建議。

該數據庫將保存企業的詳細信息。 大約25個屬性將描述單個業務; 名稱,地址等。表結構如下。

CREATE TABLE IF NOT EXISTS `businesses` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `type` int(2) NOT NULL,
    `organisation` varchar(40) NOT NULL,
    `title` varchar(12) NOT NULL,
    `given_name` varchar(40) NOT NULL,
    `other_name` varchar(40) NOT NULL,
    `family_name` varchar(40) NOT NULL,
    `suffix` varchar(5) NOT NULL,
    `reg_date` date NOT NULL,
    `main_trade_name` varchar(150) NOT NULL,
    `son_address_l1` varchar(50) NOT NULL,
    `son_address_l2` varchar(50) NOT NULL,
    `son_address_suburb` int(3) NOT NULL,
    `son_address_state` int(2) NOT NULL,
    `son_address_postcode` varchar(10) NOT NULL,
    `son_address_country` int(3) NOT NULL,
    `bus_address_l1` varchar(50) NOT NULL,
    `bus_address_l2` varchar(50) NOT NULL,
    `bus_address_suburb` int(3) NOT NULL,
    `bus_address_state` int(2) NOT NULL,
    `bus_address_postcode` varchar(10) NOT NULL,
    `bus_address_country` int(3) NOT NULL,
    `email` varchar(165) DEFAULT NULL,
    `phone` varchar(12) NOT NULL,
    `website` varchar(80) NOT NULL,
    `employee_size` int(4) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `type` (`type`),
    KEY `phone` (`phone`),
    KEY `reg_date` (`reg_date`),
    KEY `son_address_state` (`son_address_state`),
    KEY `bus_address_state` (`bus_address_state`),
    KEY `son_address_country` (`son_address_country`),
    KEY `bus_address_country` (`bus_address_country`),
    FULLTEXT KEY `title` (`title`),
    FULLTEXT KEY `son_address_l1` (`son_address_l1`),
    FULLTEXT KEY `son_address_l2` (`son_address_l2`),
    FULLTEXT KEY `bus_address_l1` (`bus_address_l1`),
    FULLTEXT KEY `bus_address_l2` (`bus_address_l2`)
) ENGINE=MyISAM;

將會有另外兩個這樣的表,原因是每個業務細節將在3個來源中呈現(用於比較目的)。 只有一個表可以寫入。

關於應用使用情況,

  1. 很少寫,大量的讀取。
  2. 10 * 300萬的數據不會超時插入,最初會插入。
  3. 應用程序不會有很多請求,每秒<10個請求。
  4. 在初始數據加載后,用戶將更新這些詳細信息。 將一個表的數據與另一個表進行比較,並更新第一個表中的數據。
  5. 會有很多搜索,主要是名稱,地址,電話和州。 單次搜索將遍歷所有3個表。 搜索需要快速。
  6. 計划使用PHP構建它

我的問題是,

  1. 是否值得在一個表中處理3個源而不是有3個表?
  2. MySQL能提供一個好的解決方案嗎?
  3. MongoDB能否使用更少的硬件資源處理相同的場景?
  4. 設置示例數據庫進行測試的最佳方法是什么? 我購買了一個亞馬遜RDS(大型)並插入了10000條記錄,並將它們加倍,直到我獲得了1000萬條記錄。
  5. 有關這個主題的任何好的閱讀?

謝謝。

我無法回答您的直接問題,但我有使用大型數據集的經驗。

我要解決的第一件事是大多數用例(在你的情況下搜索)操作,然后根據它考慮數據存儲/分區。

接下來是再次測量,測量和測量。 某些數據庫系統適用於某種操作,其他操作適用於其他操作。 隨着數據量的增加和操作復雜性的增加,運行良好的事情可能會開始降級。 這就是您測量的原因 - 如果沒有關於您使用的數據庫系統如何在這些負載下工作的良好證據,請不要嘗試設計此項。

然后迭代地工作以添加更多操作。

不要試圖最好地適合所有人。 隨着您的設計和研究的提煉,您將看到可能需要或可用的優化的地方。 您也可以像過去那樣發現,不同類型的緩存和索引可能會在不同時間進行。

祝你好運 - 聽起來像一個有趣的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM