php 已知图片颜色rgb值及所占比重,利用颜色值搜索相近图片,对于十万张图片,rgb值达到百万,数据库搜索耗时2-3秒,如何提前缓存数据使搜索时间在1s以内。除颜色之外还有分类、标签等多条件联合,感觉只有通过索引才能提升效率
基本上还是倒排索引的思路, 怎么建索引, 具体还要看你的搜索方式, 我说的搜索方式包括两方面, 一部分是搜索条件,另一部分是排序方式.
举个例子:
对于某一张图片, 它的数据结构是下面这样的:
Table1
图片id | rgb | rgb权重 | 分类 | 标签 |
---|---|---|---|---|
1 | [#ffffff, #000000] | [8, 6] | 1 | [美食, 健身] |
假定你的需求是根据rgb的值进行搜索, 并根据rgb的权重进行排序, 则需要按照下图建立索引:
Table2:
rgb | 图片id | rgb 权重 |
---|---|---|
#ffffff | 1 | 8 |
#000000 | 1 | 6 |
这样根据颜色值搜索Table2,拿到图片id后回表到Table1表拿图片数据.
事实上,实际查询会更加复杂,比如同时查询多个颜色值,再如加入分类,标签等约束,以及日后可能的需求变化. 所以通过自己建索引,太麻烦了.
看你的问题标签里面只用了mysql, memcached, redis, 考虑下使用ES, Redisearch 等方案会更好.
3 回答4.1k 阅读✓ 已解决
2 回答3.1k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
4 回答1.8k 阅读
2 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
这种肯定在图片信息数据入库时就提取了特征,即有10万条针对图片的记录信息,而且这个信息还可以根据rgb值特征进行排序,这样搜索肯定会加快。