【发布时间】:2016-04-10 13:18:09
【问题描述】:
我们有一个从多个硬件设备中提取数据的应用程序。每个设备的数据应存储在不同的文件中。
目前我们有一个按文件的 FileStream,并在数据到来时进行写入,仅此而已。
我们有很多数据进来,磁盘正在与 HDD(不是 SSD)作斗争,我猜是因为闪存更快,但也因为我们不必一直跳转到不同的文件位置。
默认情况下的一些指标:400 个不同的数据源(每个都应该有自己的文件),每个数据我们收到约 50KB/s(所以 20MB/s)。每个数据源采集同时运行,总共使用了约 6% 的 CPU。
有没有办法组织刷新到磁盘以确保更好的流量?
我们也会考虑改进硬件,但这不是这里真正的主题,因为这是改进我们的读/写的好方法
【问题讨论】:
-
听起来你需要快写,而且检索允许比较慢。那么为什么不将它存储在一个文件中,或者更好的——一个允许顺序写入的数据库。
-
没错。为此使用数据库。
-
伙计们,这不是问题......即使是这样,写入数据库也不会比写入磁盘快,还有通信开销、SQL 开销等等DBMS 开销。即使它更快,它甚至不是一个选择,因为我们有这么多的维护操作,这将使我们一直在赚钱。
-
我将您的问题解读为:我们的磁盘正在挣扎,因为我们必须到处跳来向其写入数据,我们如何避免这种情况?答案是:按顺序写。通常的实现方式是:将其存储在数据库中。
-
那么另一种选择:您是否考虑过将数据缓存在例如块中? 10 MB(x 400 数据源 = 4 GB RAM)并在块填满后立即写入整个缓冲区?这避免了为小块数据来回跳转。
标签: c# .net filestream disk hard-drive