当当的一道面试题求解

问题描述

用多线程的方式,将A表中的数据复制到相同结构的B表。数据量很大,要求速度。A表结构ID, NAME,STATuS(复制到B表的状态)问题是怎么能保证多线读A表的时候,不会读到重复的数据。不能用同步关键字。当时没想出好的方法,不知道大家有什么好的思路没有。

解决方案

举例子1.搜索到1000条数据2.根据ID进行hash运算,最简单方式取余3.根据hash运算以及你的CPU内核,execute创建线程池4.然后根据hash运算后的结果,分配到不同线程5.创建异步任务,任务submit6.结束
解决方案二:
我开发过这方面的应用。想高效率,高可靠性的完成数据的迁移,可以这样做: 一边读源数据库,一边插入数据到目标数据。 当然读的过程中,是把数据缓冲在阻塞队列中的, 然后让多线程去把数据插入到目标数据库。 可以达到5000--7000条/秒
解决方案三:
同意wgy_superpower 的。同数据库里操作,不管记录数多少,再多的,也不如数据库内部直接复制来得快。果断select * from A into B 或insert into B as select * from A
解决方案四:
数据量很大,大到什么地步,这是关键啊,上亿,几十亿这种情况就不可能将数据全部加载到内存再来处理。把A 表 的数据 复制到B表,insert into B(field...) select field... from B 这句SQL 就搞定啊,最后再来个更新 A表所有数据状态,什么多线程,不管你多好的算法,都要把 数据加载到内在再插入到B表,速度快不了
解决方案五:
先取出总条数,比如10 000 条假设用10个线程,那就每个线程1000条数据第一个线程复制1-1000 第二个线程复制1001 - 20001的 ...
解决方案六:
1、建立一个线程安全的队列2、新建一个线程,将从A表中查询的数据保存到队列中。3、新建多个线程同时从队列中获得数据并插入B表(使用事务批量插入,例如1000条插入一次)以上方法在oracle等插入时数据库为行锁时有用,如果为mysql(插入时表锁)多线程的效果就体现不出来了
解决方案七:
1. 启动工作线程,数目= CPU Core.2. 取 MAX (ID)3. 将 0 ~ MAX 做哈希分片,即 id % CPU CORE4. 每个线程获得自己的哈希分片,并各自读取。
解决方案八:
我看到你的条件是“保证多线读A表的时候,不会读到重复的数据”,我觉得这个没法保证。除非像楼下strivezsh说的,每个线程确定读那块数据。我的2种解决办法:1、 BEGIN TRANSACTION --开始事务 //查询数据 select isread from A where id=@id and isread=0 for update nowait //插入新表 insert into B values(id,name,status); //更新原表状态 update A set isread=1 where id=@id COMMIT TRANSACTION2、将数据读到java.util.concurrent.BlockingQueue中多线程取出,然后插入B写的也不是很完全,欢迎指正
解决方案九:
你的这个问题,我在实际中做过,当时我是多线程创建solar索引,这个问题我的解决法很简单 取出数据总条目,使用分页查询,然后决定每个线程拷贝哪几页的数据就行了。当时我那个表的主键是自增的,使用主键id升序查询,一切OK
解决方案十:
瞎猜啊在创建线程的时候 确定拷贝数据

时间: 2024-10-06 10:04:00

当当的一道面试题求解的相关文章

嵌入式面试题求解:给你一个8M连续内存,如何管理使用

问题描述 嵌入式面试题求解:给你一个8M连续内存,如何管理使用 给你一个8M连续内存,如何实现申请和释放,请考虑所有情况,给出最好的实现. 解决方案 可以参考操作系统原理里面说的分页.分段的方式来使用.不存在最好的实现,要考虑性能和利用率,如果希望利用率大,那么性能必然要影响,反之,如果要高效,就得牺牲一些存储效率. 解决方案二: 可以用全局二位字节数组占用掉,然后采用一定的算法管理这些分配掉的内存块,来实现简单的内存分配管理,参考uCOS-II的实现. 解决方案三: 双向链表控制 设置最小si

一道面试题(关于千万量级数据结构排序)

问题描述 一道面试题(关于千万量级数据结构排序) 题目: 已知文件中存有全国英语六级历年来的成绩(千万级别,考生分数都是正整数,最高710分),每一行都是一个人的姓名.考号和成绩,请你对考生的成绩从高到低进行排序,输出到另一个文件中. 格式 如下: 李四,201008823,678: 张三,201007432,356: 王五,201322233,464: 排序后: 李四,201008823,678: 王五,201322233,464: 王五,201322233,464: 要求:使空间复杂度和时间

语言 面试题-一道面试题,不是很清楚这个例子怎么解答,求大神帮助.

问题描述 一道面试题,不是很清楚这个例子怎么解答,求大神帮助. 提问是 这段代码有什么问题, 有什么解决思路.(我其实连问题都没看出来,代码可以编译) // Memory-mapped peripheral#define STATUS_REG_ADDR 0x12345678 // 32-bit status register#define DATA_REG_ADDR 0x1234567C // 32-bit data register // Status register bits#define

初始化顺序-今年阿里巴巴的一道笔试题

问题描述 今年阿里巴巴的一道笔试题 public class Test1 { public static int k = 0; public static Test1 t1 = new Test1("t1"); public static Test1 t2 = new Test1("t2"); public static int i = print("i"); public static int n = 99; public int j = pr

结构体定义-如何定义满足以下的Node与List结构体,今天参加斐讯的一道笔试题。

问题描述 如何定义满足以下的Node与List结构体,今天参加斐讯的一道笔试题. Node包含50个字符.

从一道面试题说去

    有一道面试题: 给定n个整型数,怎样让这n个数的使用空间最小.      ok,我们都知道在32位的机器下,int类型的数占4个字节,因此n个数总的使用空间应该是4n.(64位不做解释)那我们怎么样才能使得n个数字的使用空间最小呢?     一. 我们先来看一个例子           假设现在有3个数,1,2,3.           我们都知道数字最后都是以二进制的方式存储的,我们可以表示出1,2,3的二进制           1: 0000 0000 0000 0000 0000

《Wireshark网络分析就这么简单》—从一道面试题开始说起

从一道面试题开始说起Wireshark网络分析就这么简单从一道面试题开始说起我每次当面试官,都要伪装成无所不知的大牛. 这当然是无奈的选择--现在每封简历都那么耀眼,不装一下简直镇不住场面.比如尚未毕业的本科生,早就拿下CCIE认证:留欧两年的海归,已然精通英.法.德三门外语:最厉害的一位应聘者,研究生阶段就在国际上首次提出了计算机和生物学的跨界理论--可怜我这个老实人在一开场还能装装,到了技术环节就忍不住提问基础知识,一下子把气氛从学术殿堂拉到建筑工地.不过就是这些最基础的问题,却常常把简历精

《大咖讲Wireshark网络分析》—从一道面试题开始说起

从一道面试题开始说起大咖讲Wireshark网络分析我每次当面试官,都要伪装成无所不知的大牛. 这当然是无奈的选择--现在每封简历都那么耀眼,不装一下简直镇不住场面.比如尚未毕业的本科生,早就拿下CCIE认证:留欧两年的海归,已然精通英.法.德三门外语:最厉害的一位应聘者,研究生阶段就在国际上首次提出了计算机和生物学的跨界理论--可怜我这个老实人在一开场还能装装,到了技术环节就忍不住提问基础知识,一下子把气氛从学术殿堂拉到建筑工地.不过就是这些最基础的问题,却常常把简历精英们难住.本文要介绍的便

一道面试题:布尔变量

FROM:酷壳 下面这篇文章是从StackOverflow来的.LZ面试的时候遇到了一道面试题:"如果有三个Bool型变量,请写出一程序得知其中有2个以上变量的值是true",于是LZ做了下面的这样的程序: boolean atLeastTwo(boolean a, boolean b, boolean c) { if ((a && b) || (b && c) || (a && c)) { return true; } else { r