可变数据和不可变数据之间的差异
在我们讨论为什么可变性是实时分析的关键之前,了解它是什么很重要。
可变数据是存储在表记录中的数据,可以使用较新的数据擦除或更新。例如,在员工地址数据库中,假设每条记录都有人员的姓名及其当前居住地址。如果员工将住所从一个地方搬到另一个地方,则当前地址信息将被覆盖。
传统上,这些信息将存储在事务数据库中 – Oracle Database,MySQL,PostgreSQL等 – 因为它们允许可变性:存储在这些事务数据库中的任何字段都是可更新的。对于当今的实时分析,我们需要可变性还有许多其他原因,包括数据扩充和回填数据。
不可变数据正好相反——它不能被删除或修改。更新不是覆盖现有记录,而是仅追加。这意味着更新入到不同的位置,或者您被迫重写新旧数据以正确存储它。稍后会详细介绍其缺点。不可变数据存储在某些分析方案中非常有用。
不变性的历史用处
数据仓库普及了不变性,因为它简化了可扩展性,尤其是在分布式系统中。通过在 RAM 或 SSD 中缓存频繁访问的只读数据,可以加速分析查询。如果缓存的数据是可变的并且可能发生变化,则必须根据原始源不断检查它,以避免过时或错误。这将增加数据仓库的操作复杂性;另一方面,不可变的数据不会造成这样的麻烦。
不变性还降低了意外删除数据的风险,这在某些用例中是一个显着的好处。记录医疗保健和患者健康记录。像新的医疗处方这样的东西将被添加,而不是写在现有或过期的处方上,这样你总是有一个完整的病史。
最近,公司试图将Kafka和Kinesis等流发布系统与不可变的数据仓库配对进行分析。事件系统捕获物联网和 Web 事件,并将其存储为日志文件。这些流日志系统很难查询,因此通常会将所有数据从日志发送到不可变的数据系统(如 Apache Druid)以执行批处理分析。
数据仓库会将新流式处理的事件追加到现有表。由于过去的事件在理论上不会改变,因此一成不变地存储数据似乎是正确的技术决策。虽然不可变数据仓库只能按顺序写入数据,但它确实支持随机数据读取。这使得分析业务应用程序能够随时随地高效地查询数据。
不可变数据的问题
当然,用户很快发现,由于许多原因,数据确实需要更新。对于事件流尤其如此,因为多个事件可以反映真实对象的真实状态。此外,网络问题或软件崩溃可能会导致数据延迟交付。延迟到达的事件需要重新加载或回填。
公司也开始接受数据丰富,将相关数据添加到现有表中。最后,公司开始不得不删除客户数据,以满足GDPR等消费者隐私法规及其“被遗忘权”。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/292362.html