2013-02-04 56 views
-1

我在网络服务器上有很多图像,其特征在于它们的名称。每个文件都属于几个类别,每个类别组中的所有人。例如:没有服务器端数据库的数据库

group_fruit = ["apple", "banana", "pear"]; 
group_color = ["red", "blue", "yellow"]; 
group_origin = ["Italy", "France", "Portugal"]; 

a blue apple from Italy will be 00_01_00_uniqueid.jpg 

如果我想找到要找的类别(例如,我想从法国或葡萄牙的蓝色或黄色的梨)我可以查找文件文件列表中以简单的方式图像。 问题是当我有大量的类别组(例如10个)有很多类别(即10个),因为我只能下载一个100个项目的文件列表。在这种情况下,我可以有一个查询生成10^10个可能的答案(最坏的情况)。

鉴于近最坏的情况下什么是但难以管理,我虽然进行如下:

我让使用类别从第5组,在那里我存储的图像数量命名的几个XML文件与这些类别以及其余五组中的其他五个类别进行比较。例如

01_00_03_00_04.xml contains: 
    01_00_03_00_04_00_02_04_05_07 = 3 
    01_00_03_00_04_04_04_03_00_08 = 12 
    01_00_03_00_04_05_08_09_01_02 = 5 

这意味着我有12个图像与01_00_03_00_04_04_04_03_00_08类别,例如。 通过这种方式,如果我正在寻找特定的特征,我可以下载xmls,这些xmls与前面我要找的五组特征兼容,然后我可以搜索每个xml以查找是否有每种可能组合的结果的类别。 在最糟糕的情况下,我会搜索10^5 xml每个10^5个类别。

使用一个单一的大XML与所有文件的解决方案不适用,因为它会太大,无法下载(大延迟)。 为每个可能的类别组合下载列表的解决方案将太慢(因为我可以有几个组合没有结果,所以用户将需要太多时间来查看第一个结果)。 这就是为什么我要采用中间解决方案。

我知道最好的方法是使用数据库,但我想找到一个客户端解决方案,以便不超载便宜的服务器。

编辑:问题是:你有任何想法更有效的方法?

感谢您的耐心

+1

你忘了问一个问题。 – bikeshedder

+0

哦,是的:facepalm:,我的意思是:你有什么想法更好的方法? – andreaconsole

回答

0

我认为最简单的解决办法是创建一个包含可能的组合对象:

var combinations = { 
    1:{ 
     1:[1,2,3], 
     2:[1,2,3], 
     3:[1,2,3] 
    }, 
    2:{ 
     1:[1,2,3], 
     3:[1,2,3] 
    }, 
    3:{ 
     1:[2,3], 
     2:[1,3], 
     3:[1,2] 
    }, 
    /* 
    fruit_number:{ 
     color_number:[origin, origin, origin], 
     color_number:[origin, origin] 
    } 
    */ 
} 
var fruit = ["apple", "banana", "pear"]; 
var color = ["red", "blue", "yellow"]; 
var origin = ["Italy", "France", "Portugal"]; 

for(var f in combinations){ 
    for(var c in combinations[f]){ 
     for(var o in combinations[f][c]){ 
      console.log("A",color[c-1],fruit[f-1],"from",origin[combinations[f][c][o]-1]) 
     } 
    } 
} 

它可能不是很漂亮,但我认为这是作为高效你会得到。

+0

我不明白答案,或者我认为我的问题并不那么清楚......用户需要具有某些特征的所有图像,但是如果他选择了很多类别,他将会有大量可能的组合。是否有可能在本地储存如此庞大的数字?即使有可能,我是否应该尝试下载每张图片以了解它是否存在?也许我应该以编程的方式限制组合的数量,但是如何在不查看文件列表的情况下选择存在的组合? – andreaconsole

+1

很可能存储相对海量的数据,客户端(特别是如果它只是一大堆数字,就像我答案中的对象)试图下载每个图像是一个坏主意,我认为更好的选择是建立一个数据对象服务器端,然后发送给客户端。 – Cerbrus

+0

您是指根据所有数据或客户端搜索的数据构建数据对象?第一个会非常沉重,即使可以异步完成,第二个会需要一些与客户端数量成正比的服务器端计算(我试图避免)。但是,您认为JSON(我认为您正在谈论它,即使我从未使用过它)会比XML好得多吗? – andreaconsole

相关问题