Postgresql 如何将此模式的Postgre扩展到数十亿行?

Postgresql 如何将此模式的Postgre扩展到数十亿行?,postgresql,Postgresql,考虑一下这个场景 您是一个链接缩短服务,您有两个表: 链接 点击-主要是追加,但需要一个完整的扫描,以产生聚合,这应该是,但可能不会很快。 链接是数百万行,点击是数十亿行 你应该把这些分割成单独的硬件吗?对于这类问题,什么是充分利用postgres的正确方法?对于分区,它应该具有足够的可扩展性。在用于检索的密钥的缩短链接的哈希上划分链接。根据您的聚合和报告需要,您可以按日期对单击进行分区,也可以每天对一个分区进行分区?。当您创建一个新分区时,如果汇总的数据足以满足您的需要,可以将旧分区汇总并移动

考虑一下这个场景

您是一个链接缩短服务,您有两个表:

链接 点击-主要是追加,但需要一个完整的扫描,以产生聚合,这应该是,但可能不会很快。 链接是数百万行,点击是数十亿行


你应该把这些分割成单独的硬件吗?对于这类问题,什么是充分利用postgres的正确方法?

对于分区,它应该具有足够的可扩展性。在用于检索的密钥的缩短链接的哈希上划分链接。根据您的聚合和报告需要,您可以按日期对单击进行分区,也可以每天对一个分区进行分区?。当您创建一个新分区时,如果汇总的数据足以满足您的需要,可以将旧分区汇总并移动到历史记录或删除。

除了分区之外,我建议预先汇总数据。如果您从不需要单独的数据,而只需要每天聚合,那么在每天结束后执行聚合并在另一个表中具体化它。这将大大减少数据量并使数据易于管理。

是否强制使用postgresql?它看起来不是数十亿行的最佳选择。更喜欢使用键值数据库:redis、cassandra等。我想这不是强制性的,但它回避了一个后续问题,在这种情况下如何查询/聚合数据?我认为:分片和/或分区。数据结构在很大程度上取决于您想要哪些特定查询。只能通过链接或某些报告快速查找?主要问题:找到切分或分区的键首先,需要知道:您需要什么聚合?聚合是postgres的主要问题。postgres支持键值对: