2013-05-30 112 views
1

我目前正試圖將電子郵件(100M +)的大存儲量在亞馬遜RDS的MySQL。我做了一個單獨的emails_bodies表,但它正在變得越來越大。大的數據量在亞馬遜RDS

擁有約40K的電子郵件剛剛超過1GB表的大小,使用Amazon RDS。原始(電子郵件)文件保存在Amazon S3上,並且(僅文本)正文位於數據庫中進行搜索。隨着更高的用戶數量(很容易超過100M電子郵件),我會使用TB的MySQL存儲。

CREATE TABLE `emails` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `accounts_id` int(10) unsigned NOT NULL, 
    `ehash` varchar(32) NOT NULL, 
    `subject` text NOT NULL, 
    `body` longtext NOT NULL, 
    `html` tinyint(1) unsigned NOT NULL, 
    `size` int(10) unsigned NOT NULL, 
    `datetime` datetime NOT NULL, 
    `created` datetime NOT NULL, 
    `last_updated` datetime NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `ehash` (`ehash`), 
    KEY `accounts_id` (`accounts_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

CREATE TABLE `bodies` (
    `bodies_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `bodies_emails_id` int(10) unsigned NOT NULL, 
    `bodies_body` longtext NOT NULL, 
    PRIMARY KEY (`bodies_id`), 
    UNIQUE KEY `bodies_emails_id` (`bodies_emails_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 
+0

是一個錯字還是body_id在表'body'中列出兩次? – acutesoftware

+0

這是一種類型。感謝您的通知;) – DBU

+0

你的問題是什麼? – Anigel

回答

0

根據我的計算,每個身體平均消耗25K。這對電子郵件正文來說相當合理。儘管如果只從多部分主體中提取文本部分,如果您的唯一目的是搜索,則可以減少該數量。我相信平均規模將減少到僅僅1k或更少。

+0

我剛剛重置並重新導入電子郵件。我在body上使用strip_tags()和trim()(都是PHP)。因此,這幾乎只有文本(含內,我讓周圍6KB文本一對夫婦換行/空格只(雖然只有2K〜ATM行,因爲復位的)。這是否有事情做與我使用LONGTEXT? – DBU

+0

它不應該 –

+0

我想我已經找到了問題。幾乎所有的電子郵件仍然包含(很多)的空白是否有良好的PHP函數,它不會在網上修剪(之前和之後的任何文本),而且還去掉白線,標籤和超過1個(白色)空間? – DBU