2012-04-13 43 views
4

对于简单的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; 

会有2个这样的其他表,因为每个业务细节将在3个来源(用于比较目的)中呈现。只有一个表将要写入。

关于应用使用,

  1. 很少写,负荷读取。
  2. 10 * 300万的数据不会被超时插入,它将被插入到最初。
  3. 应用程序不会有很多请求,<每秒10个请求。
  4. 初始数据加载后,用户将更新这些细节。将一个表格的数据与其他2进行比较并更新第一个表格中的数据。
  5. 会有大量的搜索,主要是按名称,地址,电话和州。单个搜索将遍历所有3个表格。搜索需要很快。
  6. 刨使用PHP

我的问题是建设社会主义,

  1. 是否值得来处理一个表中的3个来源,而不是3个表?
  2. MySQL可以提供一个很好的解决方案吗?
  3. MongoDB能够使用更少的硬件资源处理相同的情况吗?
  4. 建立样本数据库进行测试的最佳方式是什么?我购买了Amazon RDS(大型),并插入了10000条记录,并将它们翻倍,直到获得1000万条记录。
  5. 关于此主题的任何好消息?

谢谢。

+0

结构是确定性的,还是可以修改/改进? – mamadrood 2012-04-13 02:55:17

+0

是的,它可以被修改。 – 2012-04-13 03:09:54

回答

6

我无法回答你的直接问题,但我有处理大型数据集的经验。

我想要解决的第一件事是大多数用例(在您的案例搜索中)操作将会是什么,然后考虑基于此的数据存储/分区。

接下来的事情是测量,测量和再次测量。一些数据库系统可以在一种操作中很好地工作,其他的则可以。随着数据量的增加和运营复杂性的增加,运行良好的事情可能会开始恶化。这就是为什么你要测量 - 不要试图设计这个,如果没有证据表明你使用的db系统是如何在这些负载下工作的。

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

不要试图设计一个最适合所有人。由于你的设计和研究是蒸馏的,你会看到哪些地方可能需要优化或可用。您也可以像我们过去所做的那样发现,不同类型的缓存和索引可能会在不同的时间出现。

祝你好运 - 听起来像一个有趣的项目。

+1

感谢您的回复,我想我必须更多地混淆一些示例数据集。 – 2012-04-13 16:20:04