我的设备:
- 一台拥有1颗Xeon处理器,8个逻辑核心和16GB内存的简单服务器,使用2个7200转/分钟的硬盘组成MDADM RAID1。
- PostgreSQL
- 有大量需要处理的数据,每天最多导入3000万行数据。
- 时间——复杂查询可能需要执行一个小时。
表格的简化模式将非常大:
id| integer | not null default nextval('table_id_seq'::regclass)
url_id | integer | not null
domain_id | integer | not null
position | integer | not null
上述架构的问题在于我不知道如何精确地对其进行分区。 所有时间段的数据都将被使用(没有查询会有日期过滤器)。
我考虑在“domain_id”字段上进行分区,但问题是很难预测每个分区将有多少行。
我的主要问题是:
如果我不使用分区修剪并且不打算删除旧数据,那么分区数据是否有意义?
这样做的利弊是什么?
如果我不进行分区,导入速度会降低多少?
与规范化相关的另一个问题: url是否应该导出到另一个表中?
规范化的好处
- 表将具有平均大小为20-30字节的行。 - 对“url_id”进行的连接比对“url”字段进行的连接快得多
非规范化的好处
- 数据可以更快地导入,因为在每次插入之前我不必查找“url”表。
谁能给我一些建议? 谢谢!