创建16x16二级hash目录

Hash目录是一种优化文件存储性能的方法。无论是Windows还是Linux,无论是NTFS还是ext4,每个目录下所能容纳的项目数是有限的。并不是不能保存,而是当项目数量过大的时候,会降低文件索引速度,所以权衡一个目录下应该保存多少文件是很必要的。保存得多了会影响性能,保存得少了会造成目录太多和空间浪费。所以当保存大批文件的时候,需要有一种算法能将文件比较均匀地“打散”在不同的子目录下以提高每一级的索引速度,这种算法就是 Hash。通常用的MD5、sha1等都可以用来做Hash目录,我的mSession里也同样使用了MD5,取得sessionID的第一位和第九位,这就构成了两级Hash路径,也就是说,系统把所有的Session文件分散到了16×16=256个子目录下。假设Linux每个目录下保存1000个文件可以获得最好的空间性能比,那么系统在理想情况下可以同时有256000个session文件在被使用。

#!/usr/bin/env python
# coding=utf-8

import os
import sys

mlist = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
path = sys.argv[1:] or './'
if type(path) is list and len(path) == 1: 
    path = path[0]
elif type(path) is list and len(path) !=1:
    sys.stderr.write('  Usage: %s [path]\n' % sys.argv[0])
    sys.exit(1)
if not os.path.exists(path):
    os.makedirs(path)

for level1 in mlist:
    if not os.path.exists('%s/%s' % (path, level1)):
        os.mkdir('%s/%s' % (path, level1))
    for level2 in mlist:
        if not os.path.exists('%s/%s/%s' % (path, level1, level2)):
            os.mkdir('%s/%s/%s' % (path, level1, level2))

 

posted @ 2016-12-26 13:35  hexm  阅读(416)  评论(0编辑  收藏  举报
联系我:xiaoming.unix@gmail.com