对于简单的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个来源中呈现(用于比较目的).只有一个表可以写入.
关于应用使用情况,
>很少写,大量的读取.
> 10 * 300万的数据不会超时插入,最初会插入.
>应用程序不会有大量请求,每秒10次请求.
>初始数据加载后,用户将更新这些详细信息.将一个表的数据与另一个表进行比较,并更新第一个表中的数据.
>将会有很多搜索,主要是通过姓名,地址,电话和州.单次搜索将遍历所有3个表.搜索需要快速.
>计划使用PHP构建它
我的问题是,
>是否值得在一个表中处理3个源而不是有3个表?
> MySQL能提供一个好的解决方案吗?
> MongoDB能否使用更少的硬件资源处理相同的场景?
>设置示例数据库进行测试的最佳方法是什么?我购买了一个亚马逊RDS(大型)并插入了10000条记录,并将它们加倍,直到我获得了1000万条记录.
>关于这个主题的任何好的阅读?
谢谢.
解决方法:
我无法回答您的直接问题,但我有使用大型数据集的经验.
我要解决的第一件事是大多数用例(在你的情况下搜索)操作,然后根据它考虑数据存储/分区.
接下来是再次测量,测量和测量.某些数据库系统适用于某种操作,其他操作适用于其他操作.随着数据量的增加和操作复杂性的增加,运行良好的事情可能会开始降级.这就是您测量的原因 – 如果没有关于您使用的数据库系统如何在这些负载下工作的良好证据,请不要尝试设计此项.
然后迭代地工作以添加更多操作.
不要试图最好地适合所有人.随着您的设计和研究的提炼,您将看到可能需要或可用的优化的地方.您也可以像过去那样发现,不同类型的缓存和索引可能会在不同时间进行.
祝你好运 – 听起来像一个有趣的项目.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。