需要读取大数据时如何选择最佳的缓冲区大小

问题描述 投票:0回答:3

假设一个场景,给定系统有很多日志文件,假设它是 PB 级的数据。这是我的场景。

所用技术

  • 出于我的目的,我将选择 C/C++ 来执行此操作。

我的问题

  • 我需要读取磁盘上的这些文件,并在稍后进行一些处理,无论是将它们发送到某个发布/订阅系统上的主题,还是只是在屏幕上显示这些日志。

问题

  • 为了在读取这些数据时获得最佳性能并节省磁盘和 RAM 内存等硬件资源,最佳缓冲区大小是多少?
  • 我只是不知道是否应该选择 64 KB、128 KB、5 MB、10 MB,我该如何计算?
  • 如果这个计算取决于我有多少可用资源,那么如何从这些资源中计算?
c performance buffer
3个回答
1
投票

最佳缓冲区大小取决于许多因素,尤其是硬件。您可以通过选择一种尺寸、测量操作所需的时间,然后选择另一种尺寸、测量、比较来找出最佳尺寸。重复直到找到最佳尺寸。

注意事项:

  • 您需要使用与目标系统匹配的硬件进行测量才能进行有意义的测量。
  • 您还需要使用与目标任务相当的输入进行测量。您可以通过使用真实数据的子集来减少输入的大小,以加快测量速度,但在某些大小下,它可能会影响测量的质量。
  • 可能会遇到局部最大缓冲区大小比稍大或稍小的缓冲区快,但不如其他更大或更小的缓冲区大小快的情况。一般的全局优化技术可用于避免陷入最佳值的搜索,例如模拟退火。
  • 虽然基准测试是一个简单的概念,但实际上很难正确执行。您的测量结果可能会因偶然因素而产生偏差,这些因素可能会导致目标系统的性能差异。环境随机化可能有助于减少这种情况。

系统上缓存的大小可能是一个很好的测量起点:

  • 缓存行大小
  • L1 缓存大小
  • 二级缓存大小
  • L3 缓存大小
  • 内存页大小
  • SSD DRAM 缓存大小

0
投票

我看到this关于C#中同一问题的答案,基本上缓冲区大小对于性能来说并不重要(只要它是一个合理的值)。然后,关于 RAM 和磁盘使用情况,无论缓冲区大小如何,您都将有相同数量的数据可供读/写。再次强调,只要您保持在合理的值之间,就不应该有问题。


0
投票

好问题,我刚刚在 4 找到了我的,我想也许它很高,但是..我也有这样的心态,考虑如果你做了很多动作,你会不希望一次记录小部分,iv 只是摆脱一些恶意软件,我认为那家伙将其设置为该工作的敌人,因为我不记得它有多高......但并没有给我带来任何问题

© www.soinside.com 2019 - 2024. All rights reserved.