Cassandra 分区键按月
Cassandra partition key by month
我想构建一个数据库架构,允许我在一个繁重的查询中获取上个月的所有数据,而不会出现当月新插入的性能问题。
我以为我可以按月制作分区键。但是,据我了解,此密钥将为 6 月创建 1 个分区,并将向其中插入所有新数据。即使我有 1000 个节点,Cassandra 也只会使用 1 个节点进行插入。我将失去性能的线缩放。也许我不对,Cassandra 创建一个小分区取决于节点数量?
您的理解基本正确 - 在给定的月份,只有 N 个节点在工作(其中 N 是复制因子)。
主键的实际设计将在很大程度上取决于您访问该数据的方式以及繁重的模式。如果只是访问模式,您可以使用任何能为您提供良好数据分布的分区键。然后对于繁重的查询,您可以使用 Spark、DSBulk 甚至 this 等自定义实现对数据进行全面扫描 - 无论如何,对于大量数据,您不会期望毫秒响应。
P.S。此外,如果这是您唯一需要的查询,我认为您可能不需要 Cassandra - 将数据推送到 Kafka 或类似的东西,然后转储到另一边的 Parquet/Delta Lake - 这将更具成本效益以保留具有过多计算的数据。
我想构建一个数据库架构,允许我在一个繁重的查询中获取上个月的所有数据,而不会出现当月新插入的性能问题。 我以为我可以按月制作分区键。但是,据我了解,此密钥将为 6 月创建 1 个分区,并将向其中插入所有新数据。即使我有 1000 个节点,Cassandra 也只会使用 1 个节点进行插入。我将失去性能的线缩放。也许我不对,Cassandra 创建一个小分区取决于节点数量?
您的理解基本正确 - 在给定的月份,只有 N 个节点在工作(其中 N 是复制因子)。
主键的实际设计将在很大程度上取决于您访问该数据的方式以及繁重的模式。如果只是访问模式,您可以使用任何能为您提供良好数据分布的分区键。然后对于繁重的查询,您可以使用 Spark、DSBulk 甚至 this 等自定义实现对数据进行全面扫描 - 无论如何,对于大量数据,您不会期望毫秒响应。
P.S。此外,如果这是您唯一需要的查询,我认为您可能不需要 Cassandra - 将数据推送到 Kafka 或类似的东西,然后转储到另一边的 Parquet/Delta Lake - 这将更具成本效益以保留具有过多计算的数据。