- 简单服务器与一个至强8个逻辑核心,16 GB的RAM,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”表。
有人可以给我任何建议吗?谢谢!
头正常化,尾巴你不✔ –
根据你想要用这些数据做什么,你可能会在硬件上有点动力不足 - 尤其是磁盘阵列。你需要仔细调整和设计你的工作流程才有机会。不要误解我的观点,我们在PostgreSQL数据库中拥有5TB数据的机器,每天都会有数千万的请求出现,而且性能非常出色,但我们并没有运行在一对7200 RPM的驱动器上。 – kgrittn