最近去面试的时候,碰到了一个问题:
A表 结构
ID Int 自增加,order_time Timestamp ,order_status Int。
现在希望用多线程读取A表 中的 order_time在2013/02/20 日和 order_status=50的数据,将数据复制到表结构相同的B表,问问有什么最优的思路吗?
分片,每个线程读取一个时间段内的。######对啊,当时懵了,时间分片是会趋向均匀的。。。######我也是分片的思路,但是总不能保证数据分片后的分布均匀性######每个线程分别读取ID为n*i(n为线程编号)的记录,这样对不?######回复 @creazyzh : 假设两个线程,线程1读取ID1,3,5。。线程2读取ID2,4,6。。不知道行不行######能具体讲一下思路吗######不知道考官什么意思。并发读太高返回影响性能,并发写就更影响性能了;同时,大批量读容易内存溢出,大批量写大大降低数据库性能。######
楼主,我请教你个问题。哈。假设你有128条纪录,理想状态, 外部存储区,比如存储服务器相对计算服务器,硬盘相对内存,内存相对片内cache,他们都呈现一个特征,
如果你读一次连续的8条记录,那么用一个时间单位,如果你间隔8,读两条记录,他们需要用两个时间单位,原本你就一个进程,8个时间单位你能处理64条记录。结果你分成了8个进程,每1个时间单位,让一个进程运行,你觉得,多进程快了吗?
理论上他们的处理速度是一样的,实际上多进程更慢(这里说的和多进程多线程,没什么关系,只是linux下我真想不出有什么非要用多线程的地方,所以一直喜欢用多进程这个词而已)。哈。
说这个例子,无非是让你知道多线程下涉及性能优化,除了时序逻辑以外,还包括转储的成本,数据空间分布,以及数据调度的底层策略等方面的东西。
说这个如果你对底层,特别是os的一些机理不懂的话,并非说是唬你让你去了解,而是说,如果你的数据库工具中有对应功能,直接用就行了。注意他们的使用说明即可,他们可以帮你处理完毕。也即你的优化策略,和工具的特性有很大的关系。不要空谈策略。哈。
######每次你一张嘴,就开始暴露你的无知。你越是长篇大论,就暴露得越彻底。######多线程,多进程在这里真的没优势.版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。