论大缓存操作
论大缓存操作
我们经常要在内存中搬迁大数据(可能几G,甚至更大)。如果一次性地开辟几G的缓存,想一次就完成大数据的搬迁,这几G的缓存很可能超过了系统的物理内存,这时会造成服务器卡死。鉴于此,大数据如此搬迁,是行不通的。当然小数据这样,是没有问题的。
那么,如何完成大数据通过缓存实现搬迁?
正确答案是——蚂蚁搬家。一次搬一点,分成N次搬完。
将这个问题进一步引申,网络通信,通过流传输大数据,试图通过网络,一次传输完大数据,会造成网路堵塞,因此网络传输,也应该是蚂蚁搬家。
再说点题外话,有时我们让程序SLEEP(指定时间),等待程序的执行结果。如果这个SLEEP时间较大,程序就会因睡眠而长时间无反应,其实可以分成较小的SLEEP时间,分成N次执行,一旦程序已经有了执行结果,就立即终止SLEEP。
综上所述,不论是大数据、还是长时间,只要是大任务,我们都应该分割成N个小任务来执行。这就是道。
DELPHI的流类的一个方法为我们作了最好的阐述。附上源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function TStream . CopyFrom( const Source: TStream; Count: Int64 ): Int64 ; const MaxBufSize = $F000 ; var BufSize, N: Integer ; Buffer: TBytes; begin if Count <= 0 then begin Source . Position := 0 ; Count := Source . Size; end ; Result := Count; if Count > MaxBufSize then BufSize := MaxBufSize else BufSize := Count; SetLength(Buffer, BufSize); try while Count <> 0 do begin if Count > BufSize then N := BufSize else N := Count; Source . ReadBuffer(Buffer, N); WriteBuffer(Buffer, N); Dec(Count, N); end ; finally SetLength(Buffer, 0 ); end ; end ; |
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/9649823.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2014-09-15 FIREDAC调用中间件远程方法查询数据示例