这里是我迄今为止所介绍的最佳方法,我想知道,是否有一种更好的方法(我确信有!)储存和篡夺数百万用户形象:
为了缩小名录的大小,避免不得不向非行发出任何额外呼吁,我使用根据用户独一无二的识别资料计算的封顶名录:
$firstDir = ./images ;
$secondDir = floor($userID / 100000);
$thirdDir = floor(substr($id, -5, 5) / 100);
$fourthDir = $userID;
$imgLocation = "$firstDir/$secondDir/$thirdDir/$fourthDir/1.jpg";
用户识别号($userID
)在1至数百万之间。
因此,如果我有用户识别编号7654321
,例如,用户头版将存放在:
./images/76/543/7654321/1.jpg
For User ID 654321
:
./images/6/543/654321/1.jpg
用户名54321
将:
./images/0/543/54321/1.jpg
用户名<编码>4321 将:
./images/0/43/4321/1.jpg
用户名321
将:
./images/0/3/321/1.jpg
用户识别码<21>。 将:
./images/0/0/21/1.jpg
用户名1
将:
./images/0/0/1/1.jpg
这确保有多达100 000 000 000名用户,我永远不会有1 000多个分局的名录,因此似乎保持了清洁和效率。
我在PHP(crc32)中使用了以下基准。 “h> 担任第二位主任,担任用户身份证的头3席之首,第三位主任担任下届3席,随意分发文件,但甚至如下:
$hash = crc32($userID);
$firstDir = ./images ;
$secondDir = substr($hash,0,3);
$thirdDir = substr($hash,3,3);
$fourthDir = $userID;
$imgLocation = "$firstDir/$secondDir/$thirdDir/$fourthDir/1.jpg";
然而,这一“hash”方法比上文描述的方法慢,因此没有效果。
我接着又向前迈出了一步,在我的原始例子中找到了计算第三版的更快捷的方法(底(substr($userID, -5, 5)/100);
:
$thirdDir = floor(substr($userID, -5, 3));
现在,这种变化是如何/在什么地方改变头10 000人。 用户识别仪储存起来,使大约3个名录有1个用户子或111个而不是100个,但是它的好处是更快的,因为我们不需要100个用户分立,因此我认为,长期而言,它值得。
一旦确定名录结构,我就计划如何储存实际的个人形象:例如,如果用户上载第二版,则该目录与第一版目录相同,但名称为<代码>2.jpg。 用户的缺省标本通常仅限1.jpg
,这样,如果用户决定将其2分专题作为缺省标,则将重新命名为1.jpg
和1.jpg
。 <代码>2.jpg。
最后但并非最不重要的是,如果我需要储存同一图像的多个大小,我将将其储存在用户名1上(例如):
1024px:
./images/0/0/1/1024/1.jpg
./images/0/0/1/1024/2.jpg
640px:
./images/0/0/1/640/1.jpg
./images/0/0/1/640/2.jpg
这一点令人不安。
因此,这种方法是否有任何缺陷? 如果是的话,请指出?
是否有更好的方法? 如果是的话,请说明?
在我着手实施之前,我希望确保我拥有保存和检索图像的最佳、最快、最高效的方法,以便我不必再作改动。
感谢!