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 文件的性质,我无法同时从磁盘写入和读取文件...

所以我从远程源流式传输并解析音频包,然后将它们放入SingletonNSMutableArray...

当流媒体下载音频包时,播放器同时读取和播放来自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 如何向数据库中写入的速度快的主要内容,如果未能解决你的问题,请参考以下文章

利用VBA向excel表格中写入数据后,再次运行程序的话写入速度会非常慢

向XML中写入数据

如何使用 R 向 SQL Server 表中插入数据?

sql server存储过程编程

SQL数据库容量大,查询速度慢,有何解决方案?

数据库原理实验(openGauss)交互式SQL语句