我对一些关于如何同时处理两个文件时磁盘搜索和写入工作的低级细节感兴趣。
我正在考虑将我目前同时读取和写入的文件拆分为两个文件以更好地处理并发性。它们可能同时被大量访问。
a)性能会更差,因为访问两个文件而不是一个,即使磁盘搜索时间是从一个大的“一体化”文件的开头到结尾?
b)你能以某种方式在磁盘上放置两个文件或“彼此接近”以提高它们的并发性能吗? (我想这对于磁盘碎片和所有这些都很难)
c)SSD驱动器如何影响这一点,因为它们不会旋转它们应该对这样的解决方案有好处呢?
d)如果您同时对两个文件进行快速i / o读写操作,操作系统(Windows)会进行优化,以使磁头不会来回过多的磁盘吗?
我有点好奇为什么一些数据库/ nosql解决方案在使用多个数据库时似乎非常坚定地将事物保存在一个文件中似乎提供了一些优势。
答案 0 :(得分:2)
a)不,开销与单个文件几乎相同。
b)不是真的,除非你完全了解你的使用模式。如果您需要移动文件,可以在Windows中使用FSCTL_MOVE_FILE
,但我不推荐它,因为(1)您需要管理员权限,(2)很难确定放在哪里该文件,因为每个磁盘都有不同的规格,因为您可能最终必须构建自己的碎片整理引擎。
c)是的,SSD是完美的解决方案! :)
d)磁盘中的本机命令队列设计允许在SATA驱动器上执行此操作(它可以通过操作系统重新排序32个命令以获得更好的性能),虽然它确实有用,但它并非相当尽管你可能会想到收益。文件系统的内存缓存在这里是一个更有影响力的因素 - 它将您的数据缓存在内存中,以便随机写入可以变得更顺序(更快)。答案 1 :(得分:0)
c)是的,这是事实 d)现代操作系统这样做。 NCQ在HD中执行此操作。