sql 如何向数据库中写入的速度快
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 如何向数据库中写入的速度快相关的知识,希望对你有一定的参考价值。
我的项目中用到的是去解析一个文本文件,这个文本文件有很多行(其实是一个个手机号码),一般在30-30万行左右,我用循环读取到一行,进行相应判断,再写入到另一个表中,是一条一条的,我如何才能写入的速度快,现在特别的慢,请问有什么办法可以写入的快一点,谢了我用的是C#
不要一行一行insert,这样很慢,用事务批量写入就会快很多原理:一行行insert数据时,每次insert都相当于一次事务提交,而显式用一个事务批量提交时,只提交一次即可,速度自然就会快很多 参考技术A 把所有记录合并到一条insert中。
insert into table1 (a,b,c) values (1,2,3),(4,5,6).......
可以根据实际的业务情况,和数据库性能,分批写入也可,比如10000条,分10次insert,每次1000条。
同时向 NSMutableArray 写入和读取数据
【中文标题】同时向 NSMutableArray 写入和读取数据【英文标题】:Writing and Reading Data to an NSMutableArray at the same time 【发布时间】:2015-05-18 19:22:46 【问题描述】:我正在尝试制作一个渐进式下载音频播放器,它将在播放时存储尽可能多的音频。
音频的格式是流优化m4a
。
对于这个问题,我认为将带有流媒体的音频数据包放入内存中,不要将其保存到任何文件中以保持速度更快。
而且由于 m4a 文件的性质,我无法同时从磁盘写入和读取文件...
所以我从远程源流式传输并解析音频包,然后将它们放入Singleton
NSMutableArray
...
当流媒体下载音频包时,播放器同时读取和播放来自NSMutableArray
的音频包...
平均文件有大约 11000 个音频包,因此数组的计数达到 11000。
NSMutableDictionary * myDict = [[NSMutableDictionary alloc] init];
NSData *inputData = [NSData dataWithBytes:inInputData length:inPacketDescriptions[i].mDataByteSize];
[myDict setObject:inputData forKey:@"inInputData"];
NSNumber *numberBytes = [NSNumber numberWithInt:inNumberBytes];
[myDict setObject:numberBytes forKey:@"inNumberBytes"];
NSNumber *numberPackets = [NSNumber numberWithInt:inNumberPackets];
[myDict setObject:numberPackets forKey:@"inNumberPackets"];
NSNumber *mStartOffset = [NSNumber numberWithInt:inPacketDescriptions[i].mStartOffset];
NSNumber *mDataByteSize = [NSNumber numberWithInt:inPacketDescriptions[i].mDataByteSize];
NSNumber *mVariableFramesInPacket = [NSNumber numberWithInt:inPacketDescriptions[i].mVariableFramesInPacket];
[myDict setObject:mStartOffset forKey:@"mStartOffset"];
[myDict setObject:mDataByteSize forKey:@"mDataByteSize"];
[myDict setObject:mVariableFramesInPacket forKey:@"mVariableFramesInPacket"];
[sharedCache.baseAudioCache addObject:myDict];
我的问题是在某些时候我会遇到死锁吗? 这是音频流的好习惯吗?
【问题讨论】:
我不确定音频流,但出于这个原因,我尽量不要从可变对象中读取。为什么不定期创建一个不可变副本来读取并继续写入可变版本? 你不会死锁,因为你没有锁定 - 但你可能会通过从多个线程更新数组来破坏数组(你没有显示删除数据的位置,所以我可以仅假设涉及多个线程)。您可以使用串行调度队列来确保从单个线程执行更新。 @Paulw11 我没有删除任何数据,当播放器完成读取最后一个数据包时,我将删除整个数组。数据填充到数组中的 Streamer 有自己的线程,我打算让阅读器/播放器有自己的线程 @JoshGafni 很好的建议,但在内存分配和 CPU 使用方面不会太昂贵? 如果你只在一个地方写入数组,那么你就可以了,虽然你需要考虑如果流停止会发生什么 - 如果“阅读器”赶上“作者”,如何当更多数据到达时,您会阻止阅读器并通知它吗? 【参考方案1】:我真的建议在您构建 NSMutableArray 之后使用 NSArrays。
您也可以同步锁定 NSMutableArray。
@synchronized(yourMutableArray)
[yourMutableArray stuffMethod];
【讨论】:
串行调度队列可能比@synchronised 更好 不会@synchronized()
阻止数组指针吗?当从两个不同的线程同时写入和读取数据时会发生什么?
@Paulw11,串行调度可能会更好。 (也许 dispatch_barrier_async() )我仍然会远离 NSMutableArrays。以上是关于sql 如何向数据库中写入的速度快的主要内容,如果未能解决你的问题,请参考以下文章