大数据量的采集聊天记录


枫-rickya(25620539) 16:16:21
系统是纯C写的,效率是很高的。。。结果跑了4小时没反应。。。气死我了。。
枫-rickya(25620539) 16:16:33
后来我帮他改后,20分钟就跑完的程序。。。汗。。。
[ARC]懂得放弃(55309686) 16:16:50
rickya 你考虑到数据采集时,从sybase到其他的数据库,java代码怎么写么?
枫-rickya(25620539) 16:17:15
我们没用sybase
[ARC]懂得放弃(55309686) 16:17:19
哦,是不是他没有释放资源,把内存搞光了
枫-rickya(25620539) 16:17:32
java我也不太懂。。。我就用的C和C++。。。其它都不太会呢。
枫-rickya(25620539) 16:17:46
那到不是。。。是取数都不走索引。
枫-rickya(25620539) 16:17:57
最后我问他为什么不走索引。他说索引没什么用。。。
[ARC]懂得放弃(55309686) 16:17:52
 
[ARC]懂得放弃(55309686) 16:18:02
金融数据量太大了
枫-rickya(25620539) 16:18:16
气得我当时直吐血。。。
[ARC]懂得放弃(55309686) 16:18:10
一个select 估计要很长时间
枫-rickya(25620539) 16:18:41
嗯。几千万条数据,不走索引不是找死是干什么?
[ARC]懂得放弃(55309686) 16:18:36
 
枫-rickya(25620539) 16:18:49
还研究生。。。
[ARC]懂得放弃(55309686) 16:18:45
他们用什么库
[ARC]懂得放弃(55309686) 16:18:52
你采集放到什么库
枫-rickya(25620539) 16:19:18
informix
[ARC]懂得放弃(55309686) 16:19:16
哦,金融的数据是怕人
枫-rickya(25620539) 16:19:34
采集到的就在informix里,只是另一个库里
[ARC]懂得放弃(55309686) 16:19:31
哦,那还好
[ARC]懂得放弃(55309686) 16:19:44
假如采集到sybase库,那么就存在类型转换的问题
枫-rickya(25620539) 16:20:07
sybase我们没怎么用,主要是人行在用。
枫-rickya(25620539) 16:20:12
银联用的DB2
[ARC]懂得放弃(55309686) 16:20:18
银联也是从人行出去的吧
lant℡sky(63277863) 16:20:37
枫-rickya 简单介绍一下 你是怎么处理的 他们是怎么处理的?
lant℡sky(63277863) 16:20:48
后来的 没跟上
枫-rickya(25620539) 16:21:05
嗯。以前叫什么金卡工程,就是那些人出去的。
[ARC]懂得放弃(55309686) 16:21:14
也就是银行的行业协会组织
枫-rickya(25620539) 16:21:35
那很简单嘛,查询走索引,然后程序写成一个多线程,进行并发就是了。。。
[ARC]懂得放弃(55309686) 16:21:39
跨行支付,以及多终端支付
枫-rickya(25620539) 16:22:13
银行的行业协组织主要是几家大行了。
千宠孤狼(6485785) 16:22:20
100条20分钟?
枫-rickya(25620539) 16:22:25
。。。。
[ARC]懂得放弃(55309686) 16:22:19
线程怎么控制那个线程采集前面的10万条 ,别的线程采集后面的10万条
枫-rickya(25620539) 16:22:35
8000万条数据。
枫-rickya(25620539) 16:22:47
把数据进行分组。
[ARC]懂得放弃(55309686) 16:22:44
咋分组呢? 
枫-rickya(25620539) 16:22:58
比如说吧,按机构来进行分组。
[ARC]懂得放弃(55309686) 16:22:55
这样啊
[ARC]懂得放弃(55309686) 16:22:59
有道理
枫-rickya(25620539) 16:23:16
每个线程处理一个段机构的数据
lant℡sky(63277863) 16:23:29

枫-rickya(25620539) 16:23:37
程序写得只要灵活点,就可能自动分组。
[ARC]懂得放弃(55309686) 16:23:43
那8000万条,放到别的库里面做什么,这么多条数据,不如直接数据恢复把不要的数据在删除了
枫-rickya(25620539) 16:24:30
不是放到别的库,是从8000万条数据里找到适合条件r
[ARC]懂得放弃(55309686) 16:24:27
哦,这样啊
[ARC]懂得放弃(55309686) 16:24:30
呵呵,辛苦了
枫-rickya(25620539) 16:24:49
8000万条数据是一个交易明细嘛。
[ARC]懂得放弃(55309686) 16:24:41
8000万,你多少条做一个事务提交
浪慢秦怀学架构(282105028) 16:25:05
银行的同学们.怎样把信息收集到一起呢?
浪慢秦怀学架构(282105028) 16:25:12
所有的银行卡信息.
枫-rickya(25620539) 16:25:20
以线程提交。
枫-rickya(25620539) 16:25:25
一个线程跑完就提交。
[ARC]懂得放弃(55309686) 16:25:32
晕那其中一个线程是500万条,你不提交事务么
枫-rickya(25620539) 16:26:19
并不是500万条,是从500条里找到符合条件的,然后生成数据放到另一个库中。
[ARC]懂得放弃(55309686) 16:26:40
哦,这样啊,假如你的程序中端了咋办
枫-rickya(25620539) 16:27:20
程序中断会回滚的,但完成的线程就已经提交了。
枫-rickya(25620539) 16:27:36
下次处理的时候,对未完成的数据再进行重新分组,并处理。
lant℡sky(63277863) 16:27:56
你怎么知道那些数据处理完了
枫-rickya(25620539) 16:28:11
线程处理完后对于分组表要进行处理的。
枫-rickya(25620539) 16:28:22
这样的话,可以通过分组表知道哪些机构成功了。
[ARC]懂得放弃(55309686) 16:28:18
分组表就是一个工作分配 监控用的
枫-rickya(25620539) 16:28:39
嗯。
lant℡sky(63277863) 16:28:52
 
[ARC]懂得放弃(55309686) 16:28:44
但是我怀疑 你的线程一次计算的数据量太大,会把内存使用光
枫-rickya(25620539) 16:29:02
分组后,有几个好处
枫-rickya(25620539) 16:29:09
不会。
[ARC]懂得放弃(55309686) 16:29:15
哦,假如一个线程找到符合条件的记录有200万条,你咋办?
[ARC]懂得放弃(55309686) 16:29:20
做一次事务提交么
枫-rickya(25620539) 16:29:42
用到的不是内存,而是当时分给数据库的空间。
[ARC]懂得放弃(55309686) 16:29:30
还是没找到符合的一条就写入一次
[ARC]懂得放弃(55309686) 16:30:03
你从一个库 到另一个库,不需要用内存转下么
枫-rickya(25620539) 16:30:19
这个可以具体来看,如果需要一条提交就提交,如果是不用,就可以到线程结束。
枫-rickya(25620539) 16:30:41
用一个大事务来控制。
[ARC]懂得放弃(55309686) 16:30:43
就是每个线程是一个大事务,是吧
枫-rickya(25620539) 16:31:05
这个事务可以看你怎么分了。
枫-rickya(25620539) 16:31:22
如果觉得一条数据处理完就可以提交了,那么事务就是以数据来分。
[ARC]懂得放弃(55309686) 16:31:31
一条就提交一次,那多慢呀
枫-rickya(25620539) 16:31:46
如果觉得得整个批量都成功才叫成功,那么就到整个线程结束再提交。
枫-rickya(25620539) 16:32:01
嗯。所以一般的,我很少用一条一提交的方法。
枫-rickya(25620539) 16:32:18
本身就已经对数据进行分组了,所以我一般做法都是一个线程一次提交。
[ARC]懂得放弃(55309686) 16:32:27
那一个线程有200万条呢
[ARC]懂得放弃(55309686) 16:32:35
就一次提交200万条么
志文(294055695) 16:33:13
可以1000条一次啊
[ARC]懂得放弃(55309686) 16:33:15
假如你分了10个线程,9个结束了,还有一个中断了,你如何处理失败的数据
志文(294055695) 16:33:28
用缓冲
枫-rickya(25620539) 16:33:38
嗯。这就得事先对数据量做估算了。
枫-rickya(25620539) 16:33:46
失败的回滚。
枫-rickya(25620539) 16:33:51
成功的就成功了。
枫-rickya(25620539) 16:34:03
然后对失败的再进行处理。
[ARC]懂得放弃(55309686) 16:34:06
一个线程中有200万条 ,你分了200次,假如成功了199次,还有一次没有成功,你咋办
枫-rickya(25620539) 16:34:34
那就回滚咯。
[ARC]懂得放弃(55309686) 16:34:36
但是前面的199次已经commit 了
枫-rickya(25620539) 16:34:52
不过一般的,我不会把这么大量的数据分到一个线程的。
[ARC]懂得放弃(55309686) 16:34:43
在另一个库里面了
枫-rickya(25620539) 16:35:18
那没关系的,对于最后不成功这次下次继续做处理。
[ARC]懂得放弃(55309686) 16:35:08
计算没有这么大的数据量,假如一个线程中有多次提交,有一此失败了咋办
枫-rickya(25620539) 16:35:51
那一次的不成功也没关系啊,对不成功数据做二次处理就是了。
[ARC]懂得放弃(55309686) 16:35:59
恩,你怎么记录断点信息呢
枫-rickya(25620539) 16:36:18
失败那次记录下来,然后继续往下,把先能处理先处理。
枫-rickya(25620539) 16:36:25
失败的是可以进行回滚掉的。
[ARC]懂得放弃(55309686) 16:36:17
是的
枫-rickya(25620539) 16:36:48
所以这样子下来以后,成功的已经拿走,不成功的,那就看是什么原因造成的。
[ARC]懂得放弃(55309686) 16:36:45
但是回滚的部分要能标识出来,不然下次怎么找到那批数据
枫-rickya(25620539) 16:37:12
嗯。当然会标识出来的。
[ARC]懂得放弃(55309686) 16:37:08
怎么标识呢?
枫-rickya(25620539) 16:37:34
在每次数据处理的时候,都有一张表来记录不成功数据的。
[ARC]懂得放弃(55309686) 16:37:24
区块_最后200条?
志文(294055695) 16:37:36
增加字段
枫-rickya(25620539) 16:37:53
只要记录下数据所在表的rowid就足够了。
[ARC]懂得放弃(55309686) 16:37:45
是数据体么,还是数据体的描述
[ARC]懂得放弃(55309686) 16:38:01
rowid是数据库的属性吧
枫-rickya(25620539) 16:38:19
嗯。
[ARC]懂得放弃(55309686) 16:38:11
是表的属性是吧
枫-rickya(25620539) 16:38:28
是的。
枫-rickya(25620539) 16:38:44
只要未对表进行重排列的时候,rowid就不变的。
[ARC]懂得放弃(55309686) 16:38:35
你C写的有界面么
[ARC]懂得放弃(55309686) 16:38:43

枫-rickya(25620539) 16:38:59
C写的后台。
[ARC]懂得放弃(55309686) 16:38:52
一般给你采的数据 都是历史数据
[ARC]懂得放弃(55309686) 16:39:04
进度能展示么
枫-rickya(25620539) 16:39:24
这种大数据的采集一般都是历史数据。
[ARC]懂得放弃(55309686) 16:39:15
10%..之类的
[ARC]懂得放弃(55309686) 16:39:18

枫-rickya(25620539) 16:39:31
不展示。
[ARC]懂得放弃(55309686) 16:39:33
哦,那就搞不清楚到底死机了没有
枫-rickya(25620539) 16:40:05
不可能会死机的,呵呵。。。主机性能不用考虑。
[ARC]懂得放弃(55309686) 16:40:05
恩,但是就是不知道会有多长时间
枫-rickya(25620539) 16:40:20
因为主机性能处理这个数据足够的。
枫-rickya(25620539) 16:40:29
嗯。多长时间这个确实不知道。
枫-rickya(25620539) 16:40:40
要做也是可以的。
[ARC]懂得放弃(55309686) 16:40:31
像你那个同事, 搞了几个小时还没有处理完,那人家在那里等,不得急死啊
志文(294055695) 16:40:44
每隔一分钟作记号
枫-rickya(25620539) 16:40:47
只要看分组表里完成进度就知道了。
枫-rickya(25620539) 16:41:06
分组表完成的线程情况基本知道进度。
[ARC]懂得放弃(55309686) 16:41:00
恩,要是把进度展示出来就行了,并不需要计算到底要几分钟
[ARC]懂得放弃(55309686) 16:41:19
但是最好能看到进度,特别是大数据的处理
枫-rickya(25620539) 16:41:37
只是懒得去做个东西再去展现进度了。
枫-rickya(25620539) 16:41:44
不用,一般的,看日志就知道了。
[ARC]懂得放弃(55309686) 16:41:43
但是日志是事后的
枫-rickya(25620539) 16:41:56
日志只要不断在刷新就知道进度了。
枫-rickya(25620539) 16:42:15
处理进度可以根据日志反应出来的。
枫-rickya(25620539) 16:42:21
有时实处理的日志。
[ARC]懂得放弃(55309686) 16:42:10
 
[ARC]懂得放弃(55309686) 16:42:19
informix的么
枫-rickya(25620539) 16:42:35
不是。。。
枫-rickya(25620539) 16:42:52
在写程序的时候适当的地方写个处理情况说明就知道了。
枫-rickya(25620539) 16:43:06
比如说,几号,几号线程已处理完什么之类的。
[ARC]懂得放弃(55309686) 16:42:57
呵呵,恩,但是要用个线程单独来控制显示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值