实时大量收入数据,怎样存储比较好
开了一个线程,大概1ms收一帧数据,都是放到一个arraylist里,然后在退出时存到数据库,大概30秒就6万行数据了,于是全都卡住了,高手提供一个思路,怎么整比较合适 --------------------编程问答-------------------- 为什么不一边接受一边存入数据库呢? --------------------编程问答-------------------- 这样会不会丢失数据啊?先放到队列,然后放到arraylist里,这个arraylist肯定不会丢数,我想达到以一定行数肯定要清空一下arraylist,可是存到sql又超慢的 --------------------编程问答-------------------- 量很大,数据库也不一定反应过来,写文件吧,arraylist收数据,够一定数量就pass给一个线程去写文件,
arraylist本身清空,继续收数据。 --------------------编程问答-------------------- arraylist满了就扔给另一个线程去写到文件里。后台再来个服务发现有相应的文件就存到数据库。这个服务可以独立于你的接受程序,这样无论数据总会存到数据库去的。 --------------------编程问答-------------------- 你这个数据太大了,尽量先不做处理,直接存数据库,30称6万条 一天都上亿了. --------------------编程问答-------------------- 我怎么以前试过写text文件比写数据库还慢呢,当然那是实时写的,发一行写一行
按这个方法,达到一定数量再开一个线程存数,不会影响我收数的主进程吧?
或者再建一个arraylist,开个线程存这个arraylist的时候,就把数存到那个arraylist里,然后那个满了再存那个,大概到多少行的时候合适啊,而且存到sql真的有点慢 --------------------编程问答-------------------- 我这运行一次最多也就半小时吧,收来的数还要转换显示,各画个实时曲线啥的,不能只存数哈 --------------------编程问答-------------------- 半分钟6万条相当是一秒2千多条,其实也不算是很多,你如果觉得数据库有压力; 可以做一下数据库集群,当然得有设备,多开几个线程跑跑看; 如果是用的ADO.NET可以考虑使用SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn); --------------------编程问答-------------------- 可以用数据库事务去处理批量数据,效率会提高很多 --------------------编程问答-------------------- 写文件和写数据库比,
一次一条的数据库快,
一次一万以上的话,数据库就比不上直接写文件了。
--------------------编程问答-------------------- 做成消息队列 让服务器慢慢处理! --------------------编程问答-------------------- 线程池 不解释,最合适的做法.其他感觉都不行 --------------------编程问答-------------------- 开两线程,一个接收数据,放到 ARRLIST, 一个去ARRLIST 取出来 插入数据库,插完 把这条删掉。
补充:.NET技术 , C#