gpt4 book ai didi

mysql - 快速比较大量二进制数据

转载 作者:行者123 更新时间:2023-11-29 00:42:39 26 4
gpt4 key购买 nike

我有一个数据库,其中包含大量图像(数百万)和我需要比较的这些图像的内容签名(由 libpuzzle 生成)。

我已经运行了一系列不同的替代方案来尝试使其高效,包括各种搜索算法(levenshtein difference 目前运行最快)和各种数据点作为预过滤器(将比较减少到批量只有几千张图片),但我尝试过的一切仍然会减慢生产使用的速度。我每天添加几千张图片,与整个系列中的其他所有图片相比,这些图片需要有自己的签名。

我使用的两种主要存储方法是 CouchDb 和 MySql,两者都需要超过 10 兆的数据存储,并且在几百万条记录之后,MySql 运行速度太慢(即使有结果缓存和索引键大小变化) ,使用类似 to this one 的方法,索引太大了,虽然很好但仍然很慢),在 Couch 上它似乎无法处理大型索引。我还考虑过像 Amazon SimpleDB 这样的服务,它可以解决存储问题,但考虑到如此大的索引对内存的要求,我预计会非常昂贵,而且可能不会比 Couch 好多少。

表结构很简单:

ImageId int(11),
Signature VARCHAR(1020) //implemented as text

期望的结果应该是给定 ImageId 的 ImageId 列表。一个简单的自连接(ON 比较功能)太慢了。

我的实现是比较现有图像,并持续将新图像与现有基础图像进行比较,以实现这两个目标...1) 识别相同或非常接近相同的图像(包括调整大小、裁剪和次要图像)颜色变化,以及 2) 识别相似图像以帮助可能对相似视觉内容的图像感兴趣的图像搜索。 libpuzzle 库提供了一个可用于两者的分数(我对前者使用 >95%,对后者使用 >80%)。

基本上我的问题是,有没有人知道
a) 不同的数据存储平台
b) 使用 MySql 的技术
c) 或其他一些(大概是习惯的)方法
哪个可用于以非常有效的方式线性比较大量二进制数据?

最佳答案

你所链接的“优秀方法”实际上是答案,但它有一个主要问题:它不应该在 MySQL 中完成,这对于那种搜索来说很糟糕,但在 Solr 或 Sphinx 中是正是为此而建。

因为我知道 Solr,所以你可以这样做:

使用长度恒定的 ngram 过滤器(最大 ngram 长度 = 最小 ngram 长度)将签名作为文本标记化的索引签名 - 这会将签名从链接的答案中拆分为“单词”(标记)。

<fieldType 
name="signatureNgrams"
stored="false"
class="solr.StrField">
<analyzer type="index">
<tokenizer
class="solr.analysis.NGramTokenizerFactory"
minGramSize="4"
maxGramSize="4"
/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

使用http://wiki.apache.org/solr/DisMaxQParserPlugin#mm_.28Minimum_.27Should.27_Match.29定义最小相似度(必须匹配多少个 ngram)。

关于mysql - 快速比较大量二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com