Sql 将数据存储在DB中,以便根据要插入的数据在插入之前知道主键
我试图完成的基本要点是设置一个图像处理服务器。由于页面代码是在Coldfusion中创建的,因此可能需要调整页面上的多个图像的大小,并用缩略图将其调整为适当的大小,每个图像的大小可能不同,并且每个图像的算法可能不同 其工作原理的基本要点是使用一个简单的img标记。src属性将指向图像服务器,如下所示Sql 将数据存储在DB中,以便根据要插入的数据在插入之前知道主键,sql,image-processing,coldfusion,hash,apache2,Sql,Image Processing,Coldfusion,Hash,Apache2,我试图完成的基本要点是设置一个图像处理服务器。由于页面代码是在Coldfusion中创建的,因此可能需要调整页面上的多个图像的大小,并用缩略图将其调整为适当的大小,每个图像的大小可能不同,并且每个图像的算法可能不同 其工作原理的基本要点是使用一个简单的img标记。src属性将指向图像服务器,如下所示 /.jpg”> 这允许在不同的服务器上异步调整图像大小,因此不会减慢当前页面调用的速度 当图像处理服务器接收到调用时,它将首先检查该文件是否存在,如果Apache确定该文件存在,它将立即为其提供服务
/.jpg”>
这允许在不同的服务器上异步调整图像大小,因此不会减慢当前页面调用的速度
当图像处理服务器接收到调用时,它将首先检查该文件是否存在,如果Apache确定该文件存在,它将立即为其提供服务,否则,它将调用Coldfusion,使用传递给它的主键从数据库中读取条目,以获取要处理的图像的URL和任何相关参数(在本例中,宽度、高度、方法、url、客户端,但将来可能会更多)
目前,我正在使用一个散列系统,其中参数按字母顺序排列,然后进行散列。这是一个合理的系统,还是即使散列的数据非常小(在50到200个字符之间),最终也会发生散列冲突。每个客户端可能存储多达10000个图像(在他们自己的文件夹中,因此散列冲突在跨客户端时不会成为问题)
为了减少数据库调用,在页面处理过程中,每次需要处理的图像时,我都会将该图像的信息添加到一个数组中。在页面末尾,我对数据库进行两次调用,首先检查我的数组中的行是否已经存在于数据库中,然后在必要时添加任何不存在的行(存储它们的各种参数).这里的困境是,primarykey(或图像标签中的内容)必须在实际插入数据库之前就知道,这样我就不会检查每个图像,因为某些页面上可能有数百个图像,这将非常低效
散列冲突是否与此样本大小无关(每个客户端由50-200个字符串生成10k个图像)?如果我做了一些简单的事情,比如\uuuuu.jpg
,或者将图像放在//x/.jpg
这样的文件夹中,会进一步降低散列冲突的可能性(尽管不会删除它们),会怎么样
有什么建议吗?如何进行散列?使用SHA-512作为散列算法,您将得到一个128个字符长的字符串。您可能不希望URL如此长,但这里的想法是,您可以通过更复杂的算法来最小化冲突
尽管我怀疑您是否需要担心散列冲突,但您可能只想使用UUID
EDIT:或者使用uniqueidentifer作为存储文件的表的主键。插入后,可以使用查询的OUTPUT子句返回要使用的键。我解决这一问题的方法是,不仅对文件名进行散列,而且对其参数(如宽度和高度)进行散列。因此,h灰烬碰撞基本上为0,直到我们达到数百万(数十亿?)条记录。到目前为止,我们还没有散列碰撞。目前:
hash(#data.image###data.width##data.height##data.method#)
我做了类似的事情,我使用JavaHashMap
对数据
结构排序,然后对该结构的SerializeJSON
进行散列,以确定我的唯一标识符。到目前为止,我们还没有与大约100000条记录发生冲突。