目的地:
带主键的数据库分区
索引大小问题。
数据库大小每天增长约1-3 GB
Raid设置。
你有超能力的经验吗?
长版本:
我刚买了一台家庭服务器:
Xeon E3-1245 3,4高温
32GB内存
6x 1,5 TB WD卡维尔黑色7200
我将使用服务器板英特尔S1200BTL Raid(没有钱留给一个Raid控制器)。http://ark.intel.com/products/53557/Intel-Server-Board-S1200BTL
主板有4x SATA 3GB/s端口和2x SATA 6GB/s端口
我还不确定能否在RAID 10中安装所有的6hdd,
如果不可能,我认为4xhddsraid10(MYSQL DB)和2xhddsraid0(OS/MYSQL索引)。
(如果raid 0崩溃,对我来说没问题,我只需要保护数据库)
关于数据库:
它是一个网络爬虫数据库,在那里存储域、url、链接和类似的东西。
所以我想我用每个表的主键来划分数据库
(1-1000000)(10000001-2000000)等等。
当我在数据库中搜索/插入/选择查询时,我需要扫描孔表,因为有些东西可能在第1行,而另一个在第100000000000行。
如果我按主键(auto_increment)进行这样的分区,这会使用我所有的CPU核心吗?所以它并行地扫描每个分区?或者我应该坚持使用一个没有分区的巨大数据库。
数据库会很大,在我家系统上,现在它,
Table extract: 25,034,072 Rows
Data 2,058.7 MiB
Index 2,682.8 MiB
Total 4,741.5 MiB
Table Structure:
extract_id bigint(20) unsigned NO PRI NULL auto_increment
url_id bigint(20) NO MUL NULL
extern_link varchar(2083) NO MUL NULL
anchor_text varchar(500) NO NULL
http_status smallint(2) unsigned NO 0
Indexes:
PRIMARY BTREE Yes No extract_id 25034072
link BTREE Yes No url_id
extern_link (400) 25034072
externlink BTREE No No extern_link (400) 1788148
Table urls: 21,889,542 Rows
Data 2,402.3 MiB
Index 3,456.2 MiB
Total 5,858.4 MiB
Table Structure:
url_id bigint(20) NO PRI NULL auto_increment
domain_id bigint(20) NO MUL NULL
url varchar(2083) NO NULL
added date NO NULL
last_crawl date NO NULL
extracted tinyint(2) unsigned NO MUL 0
extern_links smallint(5) unsigned NO 0
crawl_status tinyint(11) unsigned NO 0
status smallint(2) unsigned NO 0
INDEXES:
PRIMARY BTREE Yes No url_id 21889542
domain_id BTREE Yes No domain_id 0
url (330) 21889542
extracted_status BTREE No No extracted 2
status 31
我发现我可以修复externlink&link索引,我只是添加了externlink,因为我需要查询该字段,而我无法使用链接索引。你看,我能在索引上调整什么?我的新系统将有32GB,但如果数据库以这种速度增长,我将在几个星期/月内使用90%的内存。
打包索引有用吗?(性能如何下降?)
其他重要的桌子在500MB以下。
Only the URL Source table is huge: 48.6 GiB
Structure:
url_id BIGINT
pagesource mediumblob data is packed with gzip high compression
Index is only on url_id (unique).
从这个表中,当我提取了所有需要的数据后,数据就可以被擦除。
你有超能力的经验吗?http://hypertable.org/我需要的是一个适合我的设置的解决方案,因为我没有钱去做其他的硬件设置。
谢谢你的帮助。
最佳答案
对于爬网数据库来说,Hypertable是一个很好的选择。Hypertable是一个开源的、高性能的、可扩展的数据库,它模仿了Google的Bigtable。谷歌专门为他们的爬行数据库开发了Bigtable。我建议阅读Bigtable paper,因为它使用爬网数据库作为运行示例。
关于mysql - 最佳的Mysql配置(分区)和索引/超表/RAID配置(大型数据库),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9369689/