我有的:
- 具有 8 个逻辑内核、16 GB 内存、2 个 7200rpm 驱动器的 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”表。
任何人都可以给我任何建议吗?谢谢!