手机:17359299796
全国免费客服电话 17359299796 邮箱:A3669372910@163.com
手机:17359299796
电话:17359299796
地址:福建省漳州市龙文区朝阳北路1号办公楼205室
发布时间:2023-07-12 16:05:02 人气:
VME-7807RC-410000 GE
通常我们会使用任务调度平台来实现,或者通过第三方开源库/组件来实现。当然,如果你愿意,也可以通过编写一个操作系统定时任务来实现。这种方法的优点是它与事务代码分离,并且可以基于日期和时差冷热数据不同的缺点是不能做到实时性。根据以上三种方法的描述,工单系统适合采用定期扫描数据库进行冷热分离的方法。如何分离冷热数据有没有一种方法可以分离冷热数据解决方案解决了,所以在本节中,我们来看看如何区分冷热。冷热分离的基本流程如下:识别冷热数据;Insert colddata into cold storage:从热存储中删除冷数据。结束这三个基本原则在这个过程中,我们需要考虑以下几点:在前三个过程中,我们不能100%确定不会出现问题,所以我们必须使用代码来保证数据的最终一致性。为了达到事实的一致性,我们可以在工作订单表中添加一个新列冷数据(是,否,默认值:否)。首先,冷热数据分离服务将所有发现的冷数据标记为冷数据,然后将冷数据迁移到冷存储中,迁移完成后从热存储中删除相应的数据。假定在移动或删除数据时如果发生异常,那么我们需要在事务代码中添加重定位和删除数据的重试机制(这里通常使用主流的重试库,例如Polly in。. NET、Java中的quava-retry等)。
如果重试几次后仍然不成功,则代码可以停止执行冷热数据分离并发出警告,或跳过删除不成功的跳过,很有可能在下次冷热数据分离时,将重复数据插入冷库那么在插入之前,我们需要确定数据是否存在于冷库中,或者使用数据库的幂等操作来完成插入操作(如insert…MySQL数据库的Duplicate Key Update语句)。这里,我们考虑a问题是工单系统有大量的数据。如果一次性将所有的冷数据插入冷库,速度会很慢,可能需要几十分钟甚至几个小时。解决这一问题的绑定方法有两种:一种是批处理,另一种是多线程处理。提示:什么是幂等?对于完全相同的请求/操作,多次执行的结果与一次执行的结果是相同的。让我们先谈谈批处理方法。例如,在我们的工单系统中有1000万的冷数据标记,我们可以按照以下流程进行处理冷热分离:取出前1万条冷数据;将10000条冷数据存储在冷库中;删除热存储中的10000条冷数据;循环1 ~ 3,直到冷数据迁移结束。让我们来谈谈处理多线程的方法有两种方法来管理它。一种方法是设置多个不同的计时器,每个计时器将启动一个线程,在估计的距离时间内处理数据。另一种是使用线程池,首先计算需要移动的冷数据总数,然后根据每个线程的最大数量移动数据计算需要多少线程,如果所需的线程数超过线程池中的线程数,则启动线程池中的所有线程(并不是线程越多,效率越高)。这两种方法的基本原理是相同的,需要注意的问题是相同的。如何防止多个线程在数据迁移期间移动同一块冷数据?我们可以使用锁。在工作订单表中添加一个锁线程lD字段,以标识该线程当时正在处理的数据。每次线程获取数据时,它都需要这样做将您自己的线程id写入已获得数据的锁定线程id字段中。在写入线程ID之后,不能直接开始重定位数据。相反,您可以在重新定位数据之前查询您识别的数据。数据被提前写入,这会导致多个线程处理相同的数据。在再次查询之后,我们可以执行数据迁移,但是需要注意的是,用于数据迁移的数据是再次查询之后获得的数据,而不是线程在开始时获得的数据。
相关推荐