在数字时代,数据以空前的速度积累,有效管理这种信息洪流对于企业、政府和其他组织至关重要。这就是数据保留策略 (DRP) 不可或缺的原因。
数据保留策略是一套指南,规定组织保留数据的时长以及数据不再需要时如何处置。该策略不仅概述了保留数据的时长,还概述了数据在生命周期内的存储和管理方式。
在本文中,我们将描述作为 数据管理生命周期一部分的良好保留策略的构成要素,解释其对开发者的具体益处,以及如何在 PostgreSQL 中创建策略。最后,我们将展示 Timescale 如何简化和自动化此过程。如果您还没有尝试过 Timescale,您可以创建一个免费帐户 并体验 30 天。
数据保留策略的重要性不仅在于组织整洁。以下列出了制定合理的保留策略不可或缺的几个关键原因
1. 遵守法规:各个行业受到不同监管要求的约束,这些要求规定了数据应存储的时长和方式。例如,根据 HIPAA 规定的医疗保健行业或根据 GDPR 规定的金融服务行业,都有具体的数据保留指南。
2. 数据管理效率:有了明确的策略,组织可以避免不必要数据的混乱,从而提高数据库系统的效率。
3. 法律保护:在发生法律诉讼时,拥有经过良好记录的数据保留策略可以作为一种保护措施,确保相关数据可用,并且不必要的审查不会涉及无关数据。
4. 成本管理:存储数据会产生成本,尤其是大量数据。DRP 有助于消除不必要的数据存储,从而降低支出。
全面的数据保留策略具有多种用途,不仅可以确保遵守法规,还可以确保高效的数据管理。以下列出了有效数据保留策略中应包含的理想内容
1. 数据类型识别:明确分类数据类型(如个人数据、交易记录等)及其特定的保留要求。
2. 保留期限:定义每种数据类型应保留的确切时长,以符合法律和业务需求。
3. 访问和安全协议:概述谁可以访问数据,在什么情况下可以访问,以及保护数据的安全措施。
4. 数据处置程序:制定安全永久删除不再需要数据的指南。
5. 定期策略审查:包含定期审查策略的条款,以适应新的法律要求或业务变更。
6. 合规和审计程序:记录确保策略合规和进行审计的过程。
数据保存和数据保留虽然密切相关,但它们的服务目的不同
数据保留:是指出于运营或合规目的保留数据一段时间。它侧重于数据保留的实用性和法律要求。
数据保存:是指在较长时间内维护数据的完整性和可访问性,通常出于历史或研究目的。它强调保护数据免受技术过时或退化。
数据保留是数据保存的一部分,但保留通常受法律和业务需求驱动,而保存则受数据随时间推移的价值驱动。
简短的答案是“否”。数据保留和备份是不同的概念,具有不同的目标
数据保留:是指在删除或存档数据之前保留数据的时长。它受策略支配,该策略规定了组织的数据生命周期。
数据备份:备份是指创建数据的副本,以便在发生数据丢失、损坏或灾难时可以恢复数据。备份是灾难恢复计划的一部分,不一定与数据保留时间相关。
虽然两者对于数据管理都至关重要,但数据保留侧重于数据生命周期,而备份侧重于数据恢复和可用性。健全的数据管理策略集成了这两个方面,不仅确保数据的可用性,而且确保其随时间的合规管理。
现在我们已经了解了数据保留策略的组织基础知识,让我们看看它们如何帮助软件开发人员工作。毫不奇怪,数据保留策略为开发者提供了许多益处,尤其是那些管理和处理大量数据的开发者。了解和实施这些策略可以带来多种优势
1. 简化数据管理:当数据库没有被过时或无关的数据淹没时,开发人员可以更有效地管理数据库。这种效率可以带来更快的查询响应和更顺畅的数据操作。
2. 降低存储成本:开发人员可以通过定期清除不必要的数据来显著减少存储需求和相关成本。
3. 改进数据安全:明确的数据保留策略有助于识别哪些数据需要更严格的安全措施,从而增强整体数据保护。
4. 遵守法规:对于在数据法规严格的行业工作的开发人员来说,遵守数据保留策略对于避免法律纠纷至关重要。
5. 增强数据质量:根据商定的保留策略定期审查和修剪数据可以确保正在使用的数据更相关且更新,从而带来更好的决策能力。
6. 简化数据恢复:在发生系统故障的情况下,拥有较少过时的数据可以简化恢复过程。
在数据保留的基础原则之上,让我们探索一下 PostgreSQL 如何具体满足这些要求。
PostgreSQL 提供了多种实施数据保留策略的策略
1. 表分区:根据日期等标准对表进行分区可以简化数据管理。例如,可以按月或按年对数据进行分区,这样在保留期届满时更容易删除整个分区。
CREATE TABLE sales (
record_id serial NOT NULL,
ordered_at date NOT NULL,
data jsonb
) PARTITION BY RANGE (ordered_at);
CREATE TABLE sales_2023 PARTITION OF sales
FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
2. 删除数据:PostgreSQL 允许删除不再需要的数据。这可以通过手动方式或通过基于保留策略的自动脚本完成,这使得事情略微复杂化。
您可以使用 DELETE SQL 命令从 Postgres 表中删除数据。以下是基本语法
DELETE FROM table_name WHERE condition;
table_name
: 将此替换为您要从中删除数据的表的名称。
condition
: 这是决定要删除哪些行的条件。满足条件的行将被删除。
例如,如果您有一个名为 sales
的表,但没有对其进行分区,并且想要删除超过五年的订单。
DELETE FROM sales WHERE ordered_at < now() - INTERVAL '5 years';
在使用 DELETE
命令时,如果没有 WHERE
子句,请务必小心。如果您没有提供条件,该命令将删除表中的所有行。
DELETE FROM table_name;
请务必在运行此类命令之前备份数据,以防止意外数据丢失。
2. 设置后台工作进程:PostgreSQL 支持创建后台工作进程。这些进程在后台运行,可以对其进行编程,以便根据保留计划自动删除或存档数据。
3. 使用 ON DELETE
触发器:ON DELETE
触发器可以用来自动从不同表中删除或归档相关数据,确保数据保留策略在整个数据库中一致应用。
在 PostgreSQL 中创建在 DELETE 操作上运行的触发器涉及两个步骤:创建封装要执行的逻辑的函数,然后创建在 DELETE 操作发生时调用此函数的触发器。
以下是操作方法:
步骤 1:创建函数。该函数将由触发器调用。它应该返回类型为触发器的值。
CREATE OR REPLACE FUNCTION remove_history_of_canceled_sales()
RETURNS TRIGGER AS $$
BEGIN
IF ( OLD.data->>sales_status <> 'canceled') AND
(NEW.data->>sales_status = 'canceled') THEN
DELETE FROM user_history WHERE sales_id = OLD.sales_id;
END IF;
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
在此示例中,该函数检查销售状态是否更改为“已取消”,并删除与该 sales
相关的 user_history
。 OLD
关键字指的是正在更新的行旧值,而 NEW
指的是更新后的记录。
步骤 2:创建触发器。此 SQL 语句创建一个触发器,在对 your_table
执行每个 DELETE 操作之前,调用函数 update_on_delete()
。
CREATE TRIGGER remove_user_history_from_cancel
AFTER UPDATE ON sales
FOR EACH ROW EXECUTE PROCEDURE remove_canceled_sales_history();
在此示例中,触发器在 sales 上每次更新后执行,remove_canceled_sales_history
是将为 EACH
正在更新的行执行的函数。
4. 基于角色的访问控制:实施基于角色的访问控制确保只有授权用户才能删除或修改数据,这对维护数据完整性和符合保留策略至关重要。
5. 用于数据归档的数据库策略:除了数据删除之外,PostgreSQL 还可用于管理数据归档,将数据移动到访问频率较低的存储中,同时保留其供将来参考。
在 PostgreSQL 中实施这些策略需要充分了解数据库结构和组织的特定数据需求。通过有效地使用 Postgres 的功能,开发人员可以确保他们的数据保留实践既高效又符合组织的策略和法规。
Timescale 基于 PostgreSQL 但速度更快,通过允许您自动化数据保留策略来简化数据保留。此功能对于管理时间序列数据特别有用,在时间序列数据中,较旧的数据随着时间的推移往往变得不再有用。
1. 自动数据保留策略:Timescale 允许您设置策略,在数据达到一定年龄后自动丢弃旧数据。这在仅最近数据相关的应用程序中特别有用。
SELECT add_retention_policy('conditions', INTERVAL '30 days');
我们将在本文的下一节中更深入地探讨 Timescale 的自动保留策略。
2. 手动块删除:除了自动策略之外,Timescale 还提供了手动删除数据块的灵活性。这对于微调数据保留和更有效地管理存储非常有用。
3. 高效的数据删除:与传统的逐行删除不同,Timescale 在块级别处理数据保留。这种方法更快、更高效,因为它涉及删除落在指定时间范围内的整个数据块。 4. 与连续聚合相结合:您可以通过将数据保留与连续聚合相结合来对较旧的数据进行下采样。这意味着您可以维护历史数据的摘要,而无需存储原始数据。
5. 成本管理:使用 Timescale,您将根据实际存储使用量付费。通过有效地使用数据保留策略、压缩和分层存储,您可以显著管理和降低存储成本。
这些功能使 Timescale 成为希望在其时间序列应用程序中实施高效和自动数据保留策略的开发人员和组织的理想选择。
在 Timescale 中创建数据保留策略涉及几个简单的步骤
1. 选择超表:首先,选择要应用保留策略的超表。
2. 定义保留期限:确定要保留数据的期限。例如,您可能希望将数据保留 24 小时。
3. 实施策略:使用 add_retention_policy
函数将策略添加到您选择的超表。例如,要将名为“条件”的超表中的数据保留 24 小时,您将执行:SELECT add_retention_policy('conditions', INTERVAL '24 hours');
4. 删除策略:如果需要删除现有策略,请使用 remove_retention_policy
函数,并使用超表的名称。
5. 监控计划的作业:您可以通过查询 timescaledb_information.jobs
和 timescaledb_information.job_stats
表来查看计划的数据保留作业及其统计信息。
在 Timescale 中,将数据保留与连续聚合相结合,可以更有效地管理时间序列数据。连续聚合提供了一种自动生成和存储数据摘要版本的方法。随着原始数据老化变得不再那么相关,可以对其进行下采样或汇总到这些聚合中,确保保留重要信息,同时减少存储需求。
这种方法对于长期数据分析特别有用,在长期数据分析中,可能不需要详细的历史数据。通过随着时间的推移专注于聚合数据,您可以保持数据可用性和存储优化之间的平衡,使其成为趋势分析、预测和其他类似用例的理想选择。 查看我们关于数据保留与连续聚合的文档以了解更多信息.
虽然您可以使用 Postgres 对数据进行分层,但有一种更无缝、更简单的方法。Timescale 提供了一种用于归档未被积极访问的数据的功能,它使用名为 分层存储 的多层存储体系结构。这是通过创建分层策略来完成的,该策略根据指定的 move_after
阈值自动将数据移动到对象存储层。
1. 使用 add_tiering_policy 函数:此函数允许您指定超表以及将数据移动到对象存储的时间间隔。
2. 删除策略:如果需要删除分层策略,可以使用 remove_tiering_policy
函数。
分层过程是异步的,这意味着数据不会立即移动,而是被安排。
您可以在迁移过程中继续查询您的数据。
这种方法有助于以经济高效的方式管理数据,特别是对于不经常访问但仍需保留的较旧数据。
查看 Timescale 文档了解有关创建分层策略的更多信息.
在这篇博文中,我们探讨了数据保留策略的关键方面,包括它们的重要性以及在 PostgreSQL 和 Timescale 等现代数据库系统中的实施。我们了解到,数据保留策略对于法规遵从性、数据管理效率、法律保护和成本管理至关重要。它们也有利于开发人员简化数据管理并增强数据安全性。
Timescale 的分层存储系统提供了一种复杂且经济高效的方法 来归档数据,实现高效的数据存储和访问。创建分层策略会自动归档访问频率较低的数据,优化存储成本和运营效率。
结构良好的数据保留策略不仅是合规性要求,而且还是数据管理中的战略性资产。Timescale 等工具提供强大的解决方案来有效地实施这些策略,确保数据在其整个生命周期内得到负责任且高效地管理。 立即试用 Timescale.