十万百万图片筛选,按颜色筛选效率低,耗时2-4s,如何索引来提高效率

php 已知图片颜色rgb值及所占比重,利用颜色值搜索相近图片,对于十万张图片,rgb值达到百万,数据库搜索耗时2-3秒,如何提前缓存数据使搜索时间在1s以内。除颜色之外还有分类、标签等多条件联合,感觉只有通过索引才能提升效率

阅读 2.2k
2 个回答

这种肯定在图片信息数据入库时就提取了特征,即有10万条针对图片的记录信息,而且这个信息还可以根据rgb值特征进行排序,这样搜索肯定会加快。

基本上还是倒排索引的思路, 怎么建索引, 具体还要看你的搜索方式, 我说的搜索方式包括两方面, 一部分是搜索条件,另一部分是排序方式.

举个例子:
对于某一张图片, 它的数据结构是下面这样的:
Table1

图片idrgbrgb权重分类标签
1[#ffffff, #000000][8, 6]1[美食, 健身]

假定你的需求是根据rgb的值进行搜索, 并根据rgb的权重进行排序, 则需要按照下图建立索引:
Table2:

rgb图片idrgb 权重
#ffffff18
#00000016

这样根据颜色值搜索Table2,拿到图片id后回表到Table1表拿图片数据.

事实上,实际查询会更加复杂,比如同时查询多个颜色值,再如加入分类,标签等约束,以及日后可能的需求变化. 所以通过自己建索引,太麻烦了.
看你的问题标签里面只用了mysql, memcached, redis, 考虑下使用ES, Redisearch 等方案会更好.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏