背景:
拟根据车牌号码按照日期记录其过车信息。
测试方案:
数据存放文件夹为:“%ROOT%/passing_info_data”
以“京A12345”车牌为例,构建形如“%ROOT%/passing_info_data/京/A/1/2/3/4/5/”文件目录
模拟车牌号码数量500万
模拟数据日期跨度:45天
模拟每日随机过车记录:1000条
记录内容为:过车时间(long),过车地点(int)
模拟策略:
检查车牌文件是否存在
存在,加载之
不存在,模拟500万,并同时保存
第一步:
检查车牌目录是否存在,不存在创建之,
结果,500万成功创建
现象:win7系统下,单硬盘,扩展分区状态下,每创建2000左右文件夹,程序暂停约5秒
分析:
系统在有需要的时候预分配文件分配表空间
过程:
创建文件夹时使用 Directory.CreateDirectory("Path"),
创建系统函数创建,使用已经分配的文件分配表,达到上限后,系统加锁,新申请文件分配表空间,系统解锁
创建时操作系统预分配文件分配表,高速创建时,硬盘分配表空间快速被使用完毕
文件分配表在操作系统级保证多线程操作安全,分配时加锁
第二步:
使用华为存储存放数据,iscsi方式连接
结果,500万文件夹创建成功
现象:win2008R2下,磁盘阵列,华为,程序暂停不明显
千兆网卡连接阵列,网络带宽占用2%左右
分析:
华为阵列的数据使用了缓存+raid5机制,华为阵列本身实现文件及文件分配表的管理,效果较好
第三步:
在本机模拟创建文件并写入,500万*45天 = 22500万 文件,win2008R2 32线程全速写入,效率低,同样遇到文件分配表问题
侧面:searcheverything 软件的文件列表数据库及内存占用达到了10G
其他:
拟根据车牌号码按照日期记录其过车信息。
测试方案:
数据存放文件夹为:“%ROOT%/passing_info_data”
以“京A12345”车牌为例,构建形如“%ROOT%/passing_info_data/京/A/1/2/3/4/5/”文件目录
模拟车牌号码数量500万
模拟数据日期跨度:45天
模拟每日随机过车记录:1000条
记录内容为:过车时间(long),过车地点(int)
模拟策略:
检查车牌文件是否存在
存在,加载之
不存在,模拟500万,并同时保存
第一步:
检查车牌目录是否存在,不存在创建之,
结果,500万成功创建
现象:win7系统下,单硬盘,扩展分区状态下,每创建2000左右文件夹,程序暂停约5秒
分析:
系统在有需要的时候预分配文件分配表空间
过程:
创建文件夹时使用 Directory.CreateDirectory("Path"),
创建系统函数创建,使用已经分配的文件分配表,达到上限后,系统加锁,新申请文件分配表空间,系统解锁
创建时操作系统预分配文件分配表,高速创建时,硬盘分配表空间快速被使用完毕
文件分配表在操作系统级保证多线程操作安全,分配时加锁
第二步:
使用华为存储存放数据,iscsi方式连接
结果,500万文件夹创建成功
现象:win2008R2下,磁盘阵列,华为,程序暂停不明显
千兆网卡连接阵列,网络带宽占用2%左右
分析:
华为阵列的数据使用了缓存+raid5机制,华为阵列本身实现文件及文件分配表的管理,效果较好
第三步:
在本机模拟创建文件并写入,500万*45天 = 22500万 文件,win2008R2 32线程全速写入,效率低,同样遇到文件分配表问题
侧面:searcheverything 软件的文件列表数据库及内存占用达到了10G
其他:
全部检测文件夹是否存在:32线程,220秒
已知文件名,检测是否存在,检测时间暂时推论与硬盘上文件数量关系不大,O(1)
需要进行的下一步学习,
如何高效利用磁盘的文件快速定位
如何协调硬盘的最小读取单元与业务数据之间的关系
如何合理有效的使用华为存储的缓存机制
硬盘本身的二级缓存是否能够有效利用
erlang的dets中最大使用2G单个文件
数据如何组织,能充分利用硬盘最小读取单元,获取尽可能多的有效数据
硬盘数据的组织,需要特定的数据结构,
STSDb中实现了瀑布树结果,读写效率客观,如何利用