一个数据表如果同时写入同时读取 会影响表的查询速度吗,如何优化大数据量表,比如1000万条用户记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个数据表如果同时写入同时读取 会影响表的查询速度吗,如何优化大数据量表,比如1000万条用户记录相关的知识,希望对你有一定的参考价值。

一个数据表如果同时写入同时读取 会影响表的查询速度吗,如何优化大数据量表,比如1000万条用户记录,查询某个用户的操作记录,如果优化设置这个表啊
当前的表table正在被大量的写入数据,如果我要读取这个表里边的数据,是不是很影响查询速度,谢谢一楼的关注

参考技术A 写入是直接的,只要写入数据时,数据库没有大批量的动作,一般可以保存成功;
至于读取某个用户数据,读取时最好加入条件,如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 文件的性质,我无法同时从磁盘写入和读取文件...

所以我从远程源流式传输并解析音频包,然后将它们放入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。

以上是关于一个数据表如果同时写入同时读取 会影响表的查询速度吗,如何优化大数据量表,比如1000万条用户记录的主要内容,如果未能解决你的问题,请参考以下文章

MySQL联合索引

同时向 NSMutableArray 写入和读取数据

索引入门

oracle 大数据量 删除插入 有啥影响

同时读取多个文件是个好主意吗?

SDRAM 方向性 - 在“官方”带宽数据中读取和写入计数是不是相同?