一个数据表如果同时写入同时读取 会影响表的查询速度吗,如何优化大数据量表,比如1000万条用户记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个数据表如果同时写入同时读取 会影响表的查询速度吗,如何优化大数据量表,比如1000万条用户记录相关的知识,希望对你有一定的参考价值。
一个数据表如果同时写入同时读取 会影响表的查询速度吗,如何优化大数据量表,比如1000万条用户记录,查询某个用户的操作记录,如果优化设置这个表啊
当前的表table正在被大量的写入数据,如果我要读取这个表里边的数据,是不是很影响查询速度,谢谢一楼的关注
至于读取某个用户数据,读取时最好加入条件,如select * from tabe username="张三"
这样,读取数据时就不会从1000W条中逐一查找
同时向 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。以上是关于一个数据表如果同时写入同时读取 会影响表的查询速度吗,如何优化大数据量表,比如1000万条用户记录的主要内容,如果未能解决你的问题,请参考以下文章